From ea583b8c165d9678e75c881e62beb828dac5dd5f Mon Sep 17 00:00:00 2001 From: nekineki Date: Tue, 3 Dec 2024 10:23:57 +0100 Subject: update day02, day03 --- 2024/day03.rs | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) (limited to '2024/day03.rs') diff --git a/2024/day03.rs b/2024/day03.rs index 926329c..427ff74 100644 --- a/2024/day03.rs +++ b/2024/day03.rs @@ -18,33 +18,32 @@ fn main() { f.read_to_string(&mut content).expect("cannot read file"); let lines = content.trim_end().split("\n"); - let re = Regex::new(r"mul\((?[0-9]+),(?[0-9]+)\)").unwrap(); - let mut res1 = 0; - for line in lines.clone() { - res1 += re - .captures_iter(line) - .map(|caps| { - let p = |name| caps.name(name).unwrap().as_str().parse::().unwrap(); - p("a") * p("b") - }) - .fold(0, |a, b| a + b); - } + let re = Regex::new(r"mul\(([0-9]+),([0-9]+)\)").unwrap(); + let res1 = lines + .clone() + .map(|line| { + re.captures_iter(line) + .map(|caps| { + let p = |n| caps.get(n).unwrap().as_str().parse::().unwrap(); + p(1) * p(2) + }) + .sum::() + }) + .sum::(); - let re_m = Regex::new(r"^mul\((?[0-9]+),(?[0-9]+)\)").unwrap(); - let re_do = Regex::new(r"^do\(\)").unwrap(); - let re_dont = Regex::new(r"^don't\(\)").unwrap(); + let re2 = Regex::new(r"^mul\(([0-9]+),([0-9]+)\)").unwrap(); let mut res2 = 0; let mut valid = true; for line in lines { for i in 0..line.len() { - if re_do.is_match(&line[i..]) { + if line[i..].starts_with("do()") { valid = true; - } else if re_dont.is_match(&line[i..]) { + } else if line[i..].starts_with("don't()") { valid = false; - } else if valid && re_m.is_match(&line[i..]) { - let cap = re_m.captures(&line[i..]).unwrap(); - let p = |name| cap.name(name).unwrap().as_str().parse::().unwrap(); - res2 += p("a") * p("b"); + } else if valid && re2.is_match(&line[i..]) { + let cap = re2.captures(&line[i..]).unwrap(); + let p = |n| cap.get(n).unwrap().as_str().parse::().unwrap(); + res2 += p(1) * p(2); } } } -- cgit v1.2.3