1
0

Compare commits

..

2 Commits

Author SHA1 Message Date
d25a45cb52 day 18 part 2 faster with binary search 2025-10-21 11:29:29 +02:00
2d34e77b13 runner 2025-10-21 11:10:59 +02:00
2 changed files with 31 additions and 5 deletions

View File

@@ -69,12 +69,34 @@ fn part2(input: &str) -> String {
fn solve2(input: &str, fixed: usize, max_coord: i32) -> String {
let points = parse(input);
for i in fixed..points.len() {
if let None = sp(&points[..=i], max_coord) {
return format!("{},{}", points[i].0, points[i].1);
// we want the first point with which there is no shortest path
let mut i = fixed;
let mut jump = (points.len() - fixed) / 2;
#[cfg(debug_assertions)]
let mut loops = 0;
loop {
#[cfg(debug_assertions)]
{
loops += 1;
}
let l = sp(&points[..i - 1], max_coord);
let r = sp(&points[..i], max_coord);
if l.is_some() && r.is_none() {
#[cfg(debug_assertions)]
dbg!(loops);
return format!("{},{}", points[i - 1].0, points[i - 1].1);
}
if l.is_some() {
i += jump;
} else {
i -= jump;
}
jump /= 2;
if jump == 0 {
jump += 1;
}
}
unreachable!()
}
#[cfg(test)]

View File

@@ -22,6 +22,7 @@ fn main() {
(15, day15::day_main),
(16, day16::day_main),
(17, day17::day_main),
(18, day18::day_main),
(19, day19::day_main),
(21, day21::day_main),
(22, day22::day_main),
@@ -29,17 +30,20 @@ fn main() {
(23, day23::day_main),
(24, day24::day_main),
(25, day25::day_main),
(18, day18::day_main),
// PLACEHOLDER
]);
let day: Option<u8> = args().nth(1).and_then(|a| a.parse().ok());
let Some(day) = day else {
let start = Instant::now();
mains
.iter()
.sorted_by_key(|entry| entry.0)
.for_each(|(d, f)| {
run(*d, f);
});
let duration = start.elapsed();
println!();
println!("{COLOR}{ITALIC}All tasks took {duration:?}{RESET_FORMATTING}");
return;
};