summaryrefslogtreecommitdiff
path: root/2024/day03.rs
diff options
context:
space:
mode:
authornekineki <nekineki@nekineki.net>2024-12-03 10:23:57 +0100
committernekineki <nekineki@nekineki.net>2024-12-03 10:23:57 +0100
commitea583b8c165d9678e75c881e62beb828dac5dd5f (patch)
tree9b5326772a4c803e70cad48d9e21e33b6f199735 /2024/day03.rs
parentb503d9bdd545232501ca9a34623edb8a324d49ae (diff)
update day02, day03
Diffstat (limited to '2024/day03.rs')
-rw-r--r--2024/day03.rs39
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);
}
}
}