day9 with min_idx tracking

This commit is contained in:
Jan-Bulthuis 2024-12-09 08:55:36 +01:00
parent 51035e0c4f
commit 65712403ab
1 changed files with 20 additions and 3 deletions

View File

@ -62,19 +62,30 @@ fn part2(input: &Input) -> usize {
for i in 1..input.len() {
input[i].0 = input[i - 1].0 + input[i - 1].1;
}
let mut min_idx = [1; 10];
// println!("{:?}", &input);
let mut sum = 0;
for r_idx in (0..input.len()).step_by(2).rev() {
let val = r_idx / 2;
let count = input[r_idx].2;
// println!("attempt: {:?}", input[r_idx]);
for l_idx in (1..r_idx).step_by(2) {
for l_idx in (min_idx[count]..r_idx).step_by(2) {
if input[l_idx].1 >= input[r_idx].2 {
// print!("{:?}", input[l_idx]);
input[r_idx].0 = input[l_idx].0;
input[l_idx].1 -= input[r_idx].2;
input[l_idx].0 += input[r_idx].2;
input[l_idx - 1].1 += input[r_idx].2;
for i in count..10 {
if min_idx[i] > min_idx[count] {
break;
} else {
while min_idx[i] <= r_idx && input[min_idx[i]].1 < i {
min_idx[i] += 2;
}
}
}
// println!(" -> {:?}", input[l_idx]);
break;
}
@ -95,12 +106,18 @@ mod tests {
#[test]
fn part1_example() {
assert_eq!(part1(&parse("2333133121414131402")), 1928);
// assert_eq!(part1(&parse(include_str!("../input/2024/day8.txt"))), 273);
assert_eq!(
part1(&parse(include_str!("../input/2024/day9.txt").trim_end())),
6337921897505
);
}
#[test]
fn part2_example() {
assert_eq!(part2(&parse("2333133121414131402")), 2858);
// assert_eq!(part2(&parse(include_str!("../input/2024/day8.txt"))), 1017);
assert_eq!(
part2(&parse(include_str!("../input/2024/day9.txt").trim_end())),
6362722604045
);
}
}