42 lines
1.1 KiB
Rust
42 lines
1.1 KiB
Rust
use regex::Regex;
|
|
use shared::{Solution, Answer};
|
|
|
|
pub struct Day03;
|
|
|
|
impl Solution for Day03 {
|
|
fn part_1(&self, input: &str) -> Answer {
|
|
let reg = Regex::new(
|
|
r"mul\((\d+),(\d+)\)"
|
|
).unwrap();
|
|
|
|
let res : u32 = reg.captures_iter(input)
|
|
.map(|mat| mat.extract::<2>().1
|
|
.map(|x| x.parse::<u32>().unwrap())
|
|
.iter()
|
|
.product::<u32>()
|
|
).sum();
|
|
|
|
Answer::Number(res as u64)
|
|
}
|
|
|
|
fn part_2(&self, input: &str) -> Answer {
|
|
let reg = Regex::new(
|
|
r"(do)\(\)|(don't)\(\)|(mul)\((\d+),(\d+)\)"
|
|
).unwrap();
|
|
|
|
let mut enabled = true;
|
|
let mut res = 0;
|
|
|
|
for m in reg.captures_iter(input) {
|
|
if m.get(1).is_some() {
|
|
enabled = true;
|
|
} else if m.get(2).is_some() {
|
|
enabled = false;
|
|
} else if enabled {
|
|
res += m.get(4).unwrap().as_str().parse::<u32>().unwrap() * m.get(5).unwrap().as_str().parse::<u32>().unwrap();
|
|
}
|
|
}
|
|
|
|
Answer::Number(res as u64)
|
|
}
|
|
}
|