Compare commits
2 Commits
0e5d98d1bc
...
d25a45cb52
| Author | SHA1 | Date | |
|---|---|---|---|
| d25a45cb52 | |||
| 2d34e77b13 |
30
src/day18.rs
30
src/day18.rs
@@ -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)]
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user