diff options
| author | nekineki <nekineki@nekineki.net> | 2024-12-03 10:23:57 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2024-12-03 10:23:57 +0100 |
| commit | ea583b8c165d9678e75c881e62beb828dac5dd5f (patch) | |
| tree | 9b5326772a4c803e70cad48d9e21e33b6f199735 /2024/day03.rs | |
| parent | b503d9bdd545232501ca9a34623edb8a324d49ae (diff) | |
update day02, day03
Diffstat (limited to '2024/day03.rs')
| -rw-r--r-- | 2024/day03.rs | 39 |
1 files changed, 19 insertions, 20 deletions
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\((?<a>[0-9]+),(?<b>[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::<i32>().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::<i32>().unwrap(); + p(1) * p(2) + }) + .sum::<i32>() + }) + .sum::<i32>(); - let re_m = Regex::new(r"^mul\((?<a>[0-9]+),(?<b>[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::<i32>().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::<i32>().unwrap(); + res2 += p(1) * p(2); } } } |
