Watch
1
0
Fork
You've already forked advent-of-code
0

2022 Day 23 Part 2

This commit is contained in:
Jeremy Kaplan 2022-12-24 14:33:57 -08:00
commit 62c2b7ac5c

View file

@ -5,7 +5,7 @@ const INPUT: &str = include_str!("../../input/day23.txt");
fn main() { fn main() {
let grove = Grove::parse(INPUT); let grove = Grove::parse(INPUT);
println!("{}", part1(grove)); simulate(grove);
} }
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
@ -144,9 +144,8 @@ struct Move {
to: RC, to: RC,
} }
fn part1(mut grove: Grove) -> usize { fn simulate(mut grove: Grove) {
println!("== Initial State ==\n{}", grove); for round in 0.. {
for round in 0..10 {
let mut proposals: HashMap<RC, Vec<RC>> = HashMap::new(); let mut proposals: HashMap<RC, Vec<RC>> = HashMap::new();
for &src in &grove.grid { for &src in &grove.grid {
let Some(dest) = grove.propose(src, round) else { continue }; let Some(dest) = grove.propose(src, round) else { continue };
@ -169,12 +168,19 @@ fn part1(mut grove: Grove) -> usize {
}); });
} }
let done = moves.is_empty();
grove = grove.apply(moves); grove = grove.apply(moves);
println!("== End of Round {} ==\n{}", round + 1, grove); if round == 9 {
println!("Part 1: {}", grove.empty_tiles());
} }
grove.empty_tiles() if done {
println!("Part 2: {}", round + 1);
break;
}
}
} }
impl Grove { impl Grove {