day9 with min_idx tracking
This commit is contained in:
parent
51035e0c4f
commit
65712403ab
|
@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue