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() {
|
for i in 1..input.len() {
|
||||||
input[i].0 = input[i - 1].0 + input[i - 1].1;
|
input[i].0 = input[i - 1].0 + input[i - 1].1;
|
||||||
}
|
}
|
||||||
|
let mut min_idx = [1; 10];
|
||||||
// println!("{:?}", &input);
|
// println!("{:?}", &input);
|
||||||
let mut sum = 0;
|
let mut sum = 0;
|
||||||
for r_idx in (0..input.len()).step_by(2).rev() {
|
for r_idx in (0..input.len()).step_by(2).rev() {
|
||||||
let val = r_idx / 2;
|
let val = r_idx / 2;
|
||||||
let count = input[r_idx].2;
|
let count = input[r_idx].2;
|
||||||
// println!("attempt: {:?}", input[r_idx]);
|
// 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 {
|
if input[l_idx].1 >= input[r_idx].2 {
|
||||||
// print!("{:?}", input[l_idx]);
|
// print!("{:?}", input[l_idx]);
|
||||||
input[r_idx].0 = input[l_idx].0;
|
input[r_idx].0 = input[l_idx].0;
|
||||||
input[l_idx].1 -= input[r_idx].2;
|
input[l_idx].1 -= input[r_idx].2;
|
||||||
input[l_idx].0 += input[r_idx].2;
|
input[l_idx].0 += input[r_idx].2;
|
||||||
input[l_idx - 1].1 += 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]);
|
// println!(" -> {:?}", input[l_idx]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -95,12 +106,18 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn part1_example() {
|
fn part1_example() {
|
||||||
assert_eq!(part1(&parse("2333133121414131402")), 1928);
|
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]
|
#[test]
|
||||||
fn part2_example() {
|
fn part2_example() {
|
||||||
assert_eq!(part2(&parse("2333133121414131402")), 2858);
|
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