2022 Day 24 Part 2
This commit is contained in:
parent
26fa39cf6a
commit
5546820772
1 changed files with 25 additions and 8 deletions
|
|
@ -1,10 +1,14 @@
|
||||||
use std::collections::{BinaryHeap, HashMap, HashSet};
|
use std::collections::{BinaryHeap, HashMap, HashSet};
|
||||||
|
|
||||||
const INPUT: &str = include_str!("../../input/day23.txt");
|
const INPUT: &str = include_str!("../../input/day24.txt");
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let valley = Valley::parse(INPUT);
|
let valley = Valley::parse(INPUT);
|
||||||
println!("{}", part1(valley));
|
|
||||||
|
let t_goal = part1(valley.clone());
|
||||||
|
|
||||||
|
println!("{}", t_goal);
|
||||||
|
println!("{}", part2(valley, t_goal));
|
||||||
}
|
}
|
||||||
|
|
||||||
type RC = (usize, usize);
|
type RC = (usize, usize);
|
||||||
|
|
@ -199,14 +203,27 @@ impl Ord for State {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn part1(valley: Valley) -> usize {
|
fn part1(valley: Valley) -> usize {
|
||||||
|
let start = valley.start;
|
||||||
|
let goal = valley.goal;
|
||||||
|
search(valley, 0, start, goal)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(valley: Valley, t_goal: usize) -> usize {
|
||||||
|
let start = valley.start;
|
||||||
|
let goal = valley.goal;
|
||||||
|
let t_start = search(valley.clone(), t_goal, goal, start);
|
||||||
|
dbg!(t_start);
|
||||||
|
|
||||||
|
search(valley, t_start, start, goal)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn search(valley: Valley, start_minutes: usize, start_loc: RC, goal: RC) -> usize {
|
||||||
let mut queue: BinaryHeap<State> = BinaryHeap::new();
|
let mut queue: BinaryHeap<State> = BinaryHeap::new();
|
||||||
let mut expanded: HashSet<State> = HashSet::new();
|
let mut expanded: HashSet<State> = HashSet::new();
|
||||||
|
|
||||||
let goal = valley.goal;
|
|
||||||
|
|
||||||
let heuristic = move |loc: RC| -> usize {
|
let heuristic = move |loc: RC| -> usize {
|
||||||
let dr = goal.0 - loc.0;
|
let dr = goal.0.abs_diff(loc.0);
|
||||||
let dc = goal.1 - loc.1;
|
let dc = goal.1.abs_diff(loc.1);
|
||||||
dr + dc
|
dr + dc
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -225,8 +242,8 @@ fn part1(valley: Valley) -> usize {
|
||||||
};
|
};
|
||||||
|
|
||||||
let start = State {
|
let start = State {
|
||||||
minutes: 0,
|
minutes: start_minutes,
|
||||||
loc: valley.start,
|
loc: start_loc,
|
||||||
heuristic: 0,
|
heuristic: 0,
|
||||||
};
|
};
|
||||||
queue.push(start);
|
queue.push(start);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue