/ Rust / 2024 / 03.rs
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);