mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Implement 2022 day 23 part 2
This commit is contained in:
73
2022/inputs/23.txt
Normal file
73
2022/inputs/23.txt
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
#.##.##...####..#.##.##....###....##...#..#####..#.##.##.#...###.##..#.##
|
||||||
|
.#....#..#.##..#.#.#...#..#..####..#.#.##.#.#..#.#..#.#..##.#..........#.
|
||||||
|
##.#####.###.#...######..###.#.#..##.#.##.#......#..##.....###.#.##.##.##
|
||||||
|
..#######.####.#..###...####..####....#.####.#.#..#.#.###.##.###.##..#...
|
||||||
|
.#..#.##...#...####.....##.#.#..#...###.....##..#.##..#.#.#.##.##.#.#.#..
|
||||||
|
####.#...#.#..##..###.####.#######.....#.##.#..#.#...#.##.#....#.........
|
||||||
|
..#.#.####...###.##.#..#.....#.##...#.#.####.....#..##....#..#####...##..
|
||||||
|
#####..##.....#.##..#.####....#.#....#.##....#.#....##.#####.#...####..##
|
||||||
|
#.#..#####.###..####..#.##..#######....##..#.###.#.#....##.#..##.##..#..#
|
||||||
|
..##.#.##.....###..#..#..#.####....#..####..##.###...#..#..#...##..##..##
|
||||||
|
#.###.##.#...##.##.#.##..####.##.#.#.###...##.#....#.#.#.##.##...#.##.#.#
|
||||||
|
.#####..###.#.###.###....#..#..#....#.##.#.###.#.####..###.#####.#.#####.
|
||||||
|
...#..##.##.#.#.###.#######.##.#...##..##...#......#..####.#.#...#.#####.
|
||||||
|
.#..###..######..#.#.##.##.#.##....##.#...#...#..#.#.##.#...#.#..#...#.##
|
||||||
|
##..#.#...#.###.#..#..#.###.###..###.#.......#####.##.####..#...#..#....#
|
||||||
|
...#..###...#...###.#.....#.###.##.###.####.##.....##..##.#.##.#.#...#.##
|
||||||
|
####.#......#..###..#.#...##.#.##..#...#.###...#..##.#..#.....####.##.###
|
||||||
|
##....#..#####..#####....##.#####.##.###..#.#####..###.##..#.#..###.#.###
|
||||||
|
##.##...##.###.#.#..#####...#..#...#....#..#.#.#.......##..#...#..######.
|
||||||
|
......#.###.#.##..####..#..##..##.###.#..##...#...#...#...#.###.#.#.##.##
|
||||||
|
....##..#...##.##.#.#.#..#..#.#...####.#.....#.#.#.##.#.....##.#...#.#.##
|
||||||
|
..#..###.#..###.####..#.#....#..##.#.##..###...#.##.#.####.##.#.#.#.#...#
|
||||||
|
...###.....####.######...####.....#.#.#.#...#..##.##...#.###..###.#.#####
|
||||||
|
#.##..#.##.#......#####..#...####.#...###...###.##...##.##...###.###.##.#
|
||||||
|
###....#..#.###..#.####.##.#...##..#..#..#....###...#......#..#..##.#.###
|
||||||
|
.####.#.###..#########...#.##############.##...#.##.##.#..#.#.##.#.#.###.
|
||||||
|
.#.##...#...###..#..#.#.#..#.#.#.#.##........#.##.#.#.##.##.#.#.##.######
|
||||||
|
##.#.#.###..###.###.#.#.....#.###..####.#.#..##.#.##..#.####..#.......##.
|
||||||
|
.#.#####.#..###..##.#..#...#.#.##..#..#..#..##.####.##.#..###.#......#...
|
||||||
|
.##..##..#..#.#..###...#.#.##.###..#..#...#.##.#.##..#.#.##..#....#...#..
|
||||||
|
..#......###..###..##...##.###..##.#.....#.###...##.##..#...#..#.#..#....
|
||||||
|
.#.#.#.#.#...###.#######..#..###...#.###.#.###.##....#...#.##......####..
|
||||||
|
#...#.##.#...#.#.#.###.#..#.#..##.###.######.#.#....###.##...#....#....#.
|
||||||
|
.###....#..####.#..#....##.#..##..#..#.#####.#.#...##.##...####.###.##..#
|
||||||
|
#...#.#...#...##.#####.#.#...##..#..##.#...#...###....##.######.#..#.##.#
|
||||||
|
#...##...##..#......####.#.#.##.##.#.......####...####...#..#..#.#..#.##.
|
||||||
|
.###....#.####..##.###..#....#...##.###..#...#.##.#...#####.###..#..#..##
|
||||||
|
##.#..##..###.#..#..####...#.##.##..#......####....#....#.###..##......##
|
||||||
|
##.##....#####.##.###.######..#..####..##.#.####.#..####.##...##....#####
|
||||||
|
.##.#..##..#.##..###.....#..#.##..####...#.##...#.#.#.#..##.###.....##...
|
||||||
|
.##.#...#...####..##.#....##...#..###.#.#..#....##.######.#...##.###..##.
|
||||||
|
##.##.###..#.##.#..#....#.##.#.##..#...#..##.#.####..##.##...#..##.##..##
|
||||||
|
.#..###.#.#.##..#..#.####.#.##.#..##.#....#.###.##..#.###...#..#....###..
|
||||||
|
####..#.#..###..#...##.##.###.##...#.##.##...##..#.##.##...#.#..#.#.#.#..
|
||||||
|
..###...#..#...........#.###.##..#..###..##.#.##.#...#.#..#.....##..#####
|
||||||
|
.....##....###..###.###..#..#...##..#......#.##..#.#.#..##..#.###.....#.#
|
||||||
|
..####.#......#...#.#.#.#..#..##....##..#.#...##.##.##.###.###...###...#.
|
||||||
|
##..#.#.#.##.###########.#.###....####.##.#.#...####..#.##.#...##...#....
|
||||||
|
##...#..#...####.#.####....#.########.######..###....###..##..#...#.###..
|
||||||
|
##.###.####..#.##.#.#####.##.###..#.#.#.##.##.##.####.##.#...#..#..##....
|
||||||
|
.#..#.#.##..##...#....#.#....#....###..#..##..###.##.####.##.####.##.#...
|
||||||
|
##.#.##.##...#.#..#.#...##...#...#..#......#.###......###.....#.#.#####.#
|
||||||
|
..#.##.##.###....#.#..###..#..##.####.###.##..##.##....#...##.#..#..##.##
|
||||||
|
#####.#...#..##..##.#.#.....##..#..##.##.##.####..#####.#..###..#.##..##.
|
||||||
|
####.##..........###.###.#####.#.#..##...##.....#..###..##..#.####..#.##.
|
||||||
|
#.....##.####...#..##.##..#..#....##..#...#..#.#.....#..#...#.###.##.#..#
|
||||||
|
#.#.##..###.#...##.#...###.#......#....##..##.##.###.#.#.#..#.##.####..##
|
||||||
|
##..###.#.#......##.##.##.#.#####.#.#.###...###.##.#......#.##########..#
|
||||||
|
.####....#..#...###.#..##.#.####..#.#..######.#.####..##....###..##..#..#
|
||||||
|
#..##.#.#...##.#.#.########.....#.##...#....#.####.###.########.#.##.#...
|
||||||
|
#.#######..#.##.#.#.#..####..##.#..###.####.#..#########....####....###..
|
||||||
|
..##.#...##...#..###.#..##.#..#...##.####.######.####.#..##.#...#.#..###.
|
||||||
|
.#..##.#.##..#......##.#.#.##.#####.#.###....#...###...#....#.###.....###
|
||||||
|
#......#.#..##....##.########.#..#..##.##......#.#..######..##.##..##.###
|
||||||
|
..##...#...#.#..#.#########..##..#####..#..#..##.#....##...#.#....##.#.#.
|
||||||
|
.##..###.####.#..#####.###..###..#......##...#.....####..###..#..##.#.##.
|
||||||
|
......###.#..#...#..#.#.##.#.###...##.#.#....####.#..#.######.#.#...####.
|
||||||
|
...#.##.####....##..##.#.###.###.....#..###...####..##..######.#..##.....
|
||||||
|
.....####.....###.#.#.......#####.#.#....##...#####..#..#.#..#.#.#..##.##
|
||||||
|
##..##.#..##..#..#.#####..##.####.#...#.#..#..###..#..#....#...#.###.##..
|
||||||
|
#.#..#.#########.####..#####..####.#.#####....#.#..##...#..####.#..###.#.
|
||||||
|
#..##.###.##..#....#...#..#.##..#..###..#####..#######.#####....#.##.....
|
||||||
|
####.####.########.#.###....#.#..#..#.#.#.#..#....#..#.....#..##..#.##.#.
|
||||||
@@ -90,11 +90,23 @@ fn print(elves: &AHashSet<Vec2>) -> Result<()> {
|
|||||||
pub fn part1(input: &[u8]) -> Result<String> {
|
pub fn part1(input: &[u8]) -> Result<String> {
|
||||||
let mut elves = parse_input(input, parse_elves)?;
|
let mut elves = parse_input(input, parse_elves)?;
|
||||||
|
|
||||||
|
simulate(&mut elves, 10);
|
||||||
|
|
||||||
|
let (x_bounds, y_bounds) = determine_bounding_box(&elves)?;
|
||||||
|
|
||||||
|
let area = (x_bounds.end() - x_bounds.start() + 1) * (y_bounds.end() - y_bounds.start() + 1);
|
||||||
|
|
||||||
|
let free = area - elves.len() as i32;
|
||||||
|
|
||||||
|
Ok(free.to_string())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn simulate(elves: &mut AHashSet<Vec2>, max: usize) -> Option<usize> {
|
||||||
let mut todo = Vec::new();
|
let mut todo = Vec::new();
|
||||||
let mut to_return = Vec::new();
|
let mut to_return = Vec::new();
|
||||||
let mut origin = AHashMap::new();
|
let mut origin = AHashMap::new();
|
||||||
|
|
||||||
for it in 0..10 {
|
for it in 0..max {
|
||||||
// Remove all todos from a previous iteration
|
// Remove all todos from a previous iteration
|
||||||
todo.clear();
|
todo.clear();
|
||||||
|
|
||||||
@@ -148,6 +160,10 @@ pub fn part1(input: &[u8]) -> Result<String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if origin.is_empty() {
|
||||||
|
return Some(it + 1);
|
||||||
|
}
|
||||||
|
|
||||||
// Remove entries we processed
|
// Remove entries we processed
|
||||||
for elf in &todo {
|
for elf in &todo {
|
||||||
elves.remove(elf);
|
elves.remove(elf);
|
||||||
@@ -160,17 +176,15 @@ pub fn part1(input: &[u8]) -> Result<String> {
|
|||||||
elves.extend(origin.drain().map(|(dest, _)| dest));
|
elves.extend(origin.drain().map(|(dest, _)| dest));
|
||||||
}
|
}
|
||||||
|
|
||||||
let (x_bounds, y_bounds) = determine_bounding_box(&elves)?;
|
None
|
||||||
|
|
||||||
let area = (x_bounds.end() - x_bounds.start() + 1) * (y_bounds.end() - y_bounds.start() + 1);
|
|
||||||
|
|
||||||
let free = area - elves.len() as i32;
|
|
||||||
|
|
||||||
Ok(free.to_string())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn part2(_input: &[u8]) -> Result<String> {
|
pub fn part2(input: &[u8]) -> Result<String> {
|
||||||
anyhow::bail!("not implemented")
|
let mut elves = parse_input(input, parse_elves)?;
|
||||||
|
|
||||||
|
let first_non_moved = simulate(&mut elves, usize::MAX).context("Elves didn't stop moving?")?;
|
||||||
|
|
||||||
|
Ok(first_non_moved.to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@@ -183,4 +197,9 @@ mod tests {
|
|||||||
fn sample_part1() {
|
fn sample_part1() {
|
||||||
assert_eq!(part1(SAMPLE).unwrap(), "110");
|
assert_eq!(part1(SAMPLE).unwrap(), "110");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn sample_part2() {
|
||||||
|
assert_eq!(part2(SAMPLE).unwrap(), "20");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
12
2022/src/samples/23.txt
Normal file
12
2022/src/samples/23.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
..............
|
||||||
|
..............
|
||||||
|
.......#......
|
||||||
|
.....###.#....
|
||||||
|
...#...#.#....
|
||||||
|
....#...##....
|
||||||
|
...#.###......
|
||||||
|
...##.#.##....
|
||||||
|
....#..#......
|
||||||
|
..............
|
||||||
|
..............
|
||||||
|
..............
|
||||||
Reference in New Issue
Block a user