Advent of Code solutions
1use advent_core::{day_stuff, ex_for_day, Day};
2use regex::RegexBuilder;
3
4pub struct Day3;
5
6const RE: &str = r"mul\((\d+),(\d+)\)";
7
8fn re_do(i: &str) -> u64 {
9 let re = RegexBuilder::new(RE).multi_line(true).build().unwrap();
10 re.captures_iter(i)
11 .map(|c| {
12 c.get(1).unwrap().as_str().parse::<u64>().unwrap()
13 * c.get(2).unwrap().as_str().parse::<u64>().unwrap()
14 })
15 .sum::<u64>()
16}
17
18impl Day for Day3 {
19 day_stuff!(3, "161", "48");
20
21 fn part_1(input: Self::Input) -> Option<String> {
22 Some(re_do(&input).to_string())
23 }
24
25 fn part_2(input: Self::Input) -> Option<String> {
26 Some(
27 input
28 .split("do()")
29 .map(|v| re_do(v.split("don't()").nth(0).unwrap()))
30 .sum::<u64>()
31 .to_string(),
32 )
33 }
34}