Day 3 done

This commit is contained in:
Daniel Flanagan 2024-12-03 09:46:16 -06:00
parent f5e79284a1
commit ab55683f55

View file

@ -3,7 +3,7 @@ pub use crate::prelude::*;
fn main() { fn main() {
let input = day_input(3); let input = day_input(3);
show_answers(sum_muls(&input), 0); show_answers(sum_muls(&input), sum_muls_with_do_and_dont(&input));
} }
struct MulParser { struct MulParser {
@ -20,7 +20,6 @@ fn sum_muls(input: &str) -> usize {
let mut right: Option<usize> = None; let mut right: Option<usize> = None;
let mut token = &s[0..0]; let mut token = &s[0..0];
for c in s.chars() { for c in s.chars() {
println!("c: {c}");
match c { match c {
'0'..='9' => { '0'..='9' => {
token = &s[0..token.len() + 1]; token = &s[0..token.len() + 1];
@ -29,7 +28,6 @@ fn sum_muls(input: &str) -> usize {
} }
} }
',' => { ',' => {
println!("token at , {token:?}");
if left.is_some() { if left.is_some() {
break; break;
} }
@ -38,7 +36,6 @@ fn sum_muls(input: &str) -> usize {
token = &s[0..0]; token = &s[0..0];
} }
')' => { ')' => {
println!("token at ) {token:?}");
if right.is_some() { if right.is_some() {
break; break;
} }
@ -53,7 +50,26 @@ fn sum_muls(input: &str) -> usize {
sum += left * right; sum += left * right;
} }
} }
return sum; sum
}
fn sum_muls_with_do_and_dont(input: &str) -> usize {
let mut sum = 0;
let mut s = &input[..];
let mut mul_rest = true;
while let Some(i) = s.find("don't()") {
sum += sum_muls(&s[0..i]);
s = &s[i..];
mul_rest = false;
if let Some(i) = s.find("do()") {
s = &s[i..];
mul_rest = true;
}
}
if mul_rest {
sum += sum_muls(s);
}
sum
} }
#[cfg(test)] #[cfg(test)]