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 {
blink2(stones, 25)
blink3(stones.to_vec(), 25)
}
fn pt2(stones: &[u128]) -> usize {
let mut total = 0;
for stone in stones {
total += blink2(&[*stone], 75);
total += blink3(vec![*stone], 75);
}
total
}
@ -56,6 +56,35 @@ fn blink2(stones: &[u128], blinks: usize) -> usize {
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> {
input
.trim()
@ -77,6 +106,6 @@ mod test {
#[test]
fn p2() {
let stones = parse("125 17");
assert_eq!(22, blink2(&stones, 6));
assert_eq!(55312, blink3(stones, 25));
}
}