From 462b881829b03625ec35bcb9ccac5033e70ce510 Mon Sep 17 00:00:00 2001 From: alex <> Date: Tue, 3 Dec 2024 10:06:34 +0100 Subject: [PATCH] Day03 - part 2 --- src/day03.rs | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/day03.rs b/src/day03.rs index a650dfd..51bf91d 100644 --- a/src/day03.rs +++ b/src/day03.rs @@ -39,7 +39,26 @@ fn run_part1(input: &str) -> Result> { fn run_part2(input: &str) -> Result> { println!("Running {} - part 2", get_day()); - Ok(0) + let re = Regex::new(r"mul\(\d{1,3},\d{1,3}\)|do\(\)|don't\(\)").unwrap(); + + let mut res: u32 = 0; + let mut enabled = true; + + re.find_iter(input) + .map(|m| m.as_str()) + .for_each(|m| { + if m == "do()" { enabled = true; } + else if m == "don't()" { enabled = false; } + else if enabled { + let v = m[4..m.len()-1] + .split(",") + .map(|v| v.parse::().unwrap()) + .collect::>(); + res += v[0]*v[1]; + } + }); + + Ok(res) } #[cfg(test)] @@ -49,6 +68,9 @@ mod tests { static TEXT_INPUT: &str = "\ xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))"; + static TEXT_INPUT_2: &str = "\ +xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))"; + #[test] fn test_part1() { assert_eq!(161, run_part1(TEXT_INPUT).unwrap()); @@ -56,6 +78,6 @@ xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))"; #[test] fn test_part2() { - assert_eq!(0, run_part2(TEXT_INPUT).unwrap()); + assert_eq!(48, run_part2(TEXT_INPUT_2).unwrap()); } } -- 2.39.5