Advent of Code solutions

Day 3

bwc9876.dev f4cc148b 65dbf078

verified
+23 -5
+1
Cargo.lock
··· 355 355 dependencies = [ 356 356 "advent_core", 357 357 "macros", 358 + "regex", 358 359 "utils", 359 360 ]
+1
years/2024/Cargo.toml
··· 7 7 [dependencies] 8 8 advent_core = { path = "../../advent_core" } 9 9 macros = { path = "../../macros" } 10 + regex = "1.11.1" 10 11 utils = { path = "../../utils" }
+19 -5
years/2024/src/day_3.rs
··· 1 1 2 2 use advent_core::{Day, day_stuff, ex_for_day}; 3 + use regex::RegexBuilder; 3 4 4 5 pub struct Day3; 6 + 7 + const RE: &str = r"mul\((\d+),(\d+)\)"; 8 + 9 + fn re_do(i: &str) -> u64 { 10 + let re = RegexBuilder::new(RE).multi_line(true).build().unwrap(); 11 + re.captures_iter(i).map(|c| { 12 + c.get(1).unwrap().as_str().parse::<u64>().unwrap() 13 + * 14 + c.get(2).unwrap().as_str().parse::<u64>().unwrap() 15 + }).sum::<u64>() 16 + } 5 17 6 18 impl Day for Day3 { 7 19 8 - day_stuff!(3, "", ""); 20 + day_stuff!(3, "161", "48"); 9 21 10 - fn part_1(_input: Self::Input) -> Option<String> { 11 - None 22 + fn part_1(input: Self::Input) -> Option<String> { 23 + Some(re_do(&input).to_string()) 12 24 } 13 25 14 - fn part_2(_input: Self::Input) -> Option<String> { 15 - None 26 + fn part_2(input: Self::Input) -> Option<String> { 27 + Some(input.split("do()").map(|v| 28 + re_do(v.split("don't()").nth(0).unwrap()) 29 + ).sum::<u64>().to_string()) 16 30 } 17 31 }
+1
years/2024/src/examples/day_3/1.txt
··· 1 + xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))
+1
years/2024/src/examples/day_3/2.txt
··· 1 + xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))