Skip to content

Commit 2e99e81

Browse files
committedDec 4, 2024·
Solve Day 3 Part 2
1 parent 5710085 commit 2e99e81

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed
 

‎data/examples/03-2.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))

‎src/bin/03.rs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,21 @@ pub fn part_one(input: &str) -> Option<u32> {
1717
}
1818

1919
pub fn part_two(input: &str) -> Option<u32> {
20-
None
20+
let without_newlines = input.replace('\n', "");
21+
let dont_do_re = Regex::new(r"don't\(\).*?(do\(\)|$)").unwrap();
22+
let mul_re = Regex::new(r"mul\((\d+),(\d+)\)").unwrap();
23+
24+
let filtered = dont_do_re.replace_all(&without_newlines, "");
25+
let result: u32 = mul_re
26+
.captures_iter(&filtered)
27+
.filter_map(|x| {
28+
let first = x[1].parse::<u32>().ok()?;
29+
let second = x[2].parse::<u32>().ok()?;
30+
Some(first * second)
31+
})
32+
.sum();
33+
34+
Some(result)
2135
}
2236

2337
#[cfg(test)]
@@ -32,7 +46,9 @@ mod tests {
3246

3347
#[test]
3448
fn test_part_two() {
35-
let result = part_two(&advent_of_code::template::read_file("examples", DAY));
36-
assert_eq!(result, None);
49+
let result = part_two(&advent_of_code::template::read_file_part(
50+
"examples", DAY, 2,
51+
));
52+
assert_eq!(result, Some(48));
3753
}
3854
}

0 commit comments

Comments
 (0)
Please sign in to comment.