checkpoint, still not working

This commit is contained in:
Joe Ardent 2025-01-08 21:32:21 -08:00
parent aa9dab827f
commit 6ce747054d

View file

@ -8,13 +8,13 @@ fn main() {
} }
fn pt1(stones: &[u128]) -> usize { fn pt1(stones: &[u128]) -> usize {
blink2(stones, 25) blink3(stones.to_vec(), 25)
} }
fn pt2(stones: &[u128]) -> usize { fn pt2(stones: &[u128]) -> usize {
let mut total = 0; let mut total = 0;
for stone in stones { for stone in stones {
total += blink2(&[*stone], 75); total += blink3(vec![*stone], 75);
} }
total total
} }
@ -56,6 +56,35 @@ fn blink2(stones: &[u128], blinks: usize) -> usize {
stones.len() stones.len()
} }
fn blink3(mut stones: Vec<u128>, blinks: usize) -> usize {
let mut total = stones.len();
for blink in 0..blinks {
let mut rights = Vec::new();
for stone in stones.iter_mut() {
let digits = stone.to_string();
match stone {
0 => {
*stone = 1;
}
_ if digits.len() % 2 == 0 => {
let mid = digits.len() / 2;
let left = digits[0..mid].parse().unwrap();
let right = digits[mid..].parse().unwrap();
*stone = left;
rights.push(right);
total += 1;
}
_ => {
*stone *= 2024;
}
}
}
total += blink3(rights, blinks - blink);
}
total
}
fn parse(input: &str) -> Vec<u128> { fn parse(input: &str) -> Vec<u128> {
input input
.trim() .trim()
@ -77,6 +106,6 @@ mod test {
#[test] #[test]
fn p2() { fn p2() {
let stones = parse("125 17"); let stones = parse("125 17");
assert_eq!(22, blink2(&stones, 6)); assert_eq!(55312, blink3(stones, 25));
} }
} }