03.rs
1 #![feature(test)] 2 3 use regex::Regex; 4 5 type Input = String; 6 7 fn setup(input: &str) -> Input { 8 input.trim().into() 9 } 10 11 fn part1(input: &Input) -> i64 { 12 let re = Regex::new(r"mul\((\d+),(\d+)\)").unwrap(); 13 re.captures_iter(input) 14 .map(|c| c[1].parse::<i64>().unwrap() * c[2].parse::<i64>().unwrap()) 15 .sum() 16 } 17 18 fn part2(input: &Input) -> i64 { 19 let re = Regex::new(r"mul\((\d+),(\d+)\)|do\(\)|don't\(\)").unwrap(); 20 let mut enabled = true; 21 let mut out = 0; 22 for c in re.captures_iter(input) { 23 if &c[0] == "do()" { 24 enabled = true; 25 } else if &c[0] == "don't()" { 26 enabled = false; 27 } else if enabled { 28 out += c[1].parse::<i64>().unwrap() * c[2].parse::<i64>().unwrap(); 29 } 30 } 31 out 32 } 33 34 aoc::main!(2024, 3, ex: 1, 2);