300 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			300 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Advent of Code
 | ||
| br0xen (AoC++) 39*
 | ||
| 
 | ||
| --- Day 23: Unstable Diffusion ---
 | ||
| 
 | ||
|    You enter a large crater of gray dirt where the grove is supposed to be. All around
 | ||
|    you, plants you imagine were expected to be full of fruit are instead withered and
 | ||
|    broken. A large group of Elves has formed in the middle of the grove.
 | ||
| 
 | ||
|    "...but this volcano has been dormant for months. Without ash, the fruit can't grow!"
 | ||
| 
 | ||
|    You look up to see a massive, snow-capped mountain towering above you.
 | ||
| 
 | ||
|    "It's not like there are other active volcanoes here; we've looked everywhere."
 | ||
| 
 | ||
|    "But our scanners show active magma flows; clearly it's going somewhere."
 | ||
| 
 | ||
|    They finally notice you at the edge of the grove, your pack almost overflowing from
 | ||
|    the random star fruit you've been collecting. Behind you, elephants and monkeys
 | ||
|    explore the grove, looking concerned. Then, the Elves recognize the ash cloud slowly
 | ||
|    spreading above your recent detour.
 | ||
| 
 | ||
|    "Why do you--" "How is--" "Did you just--"
 | ||
| 
 | ||
|    Before any of them can form a complete question, another Elf speaks up: "Okay, new
 | ||
|    plan. We have almost enough fruit already, and ash from the plume should spread here
 | ||
|    eventually. If we quickly plant new seedlings now, we can still make it to the
 | ||
|    extraction point. Spread out!"
 | ||
| 
 | ||
|    The Elves each reach into their pack and pull out a tiny plant. The plants rely on
 | ||
|    important nutrients from the ash, so they can't be planted too close together.
 | ||
| 
 | ||
|    There isn't enough time to let the Elves figure out where to plant the seedlings
 | ||
|    themselves; you quickly scan the grove (your puzzle input) and note their positions.
 | ||
| 
 | ||
|    For example:
 | ||
| 
 | ||
|  ....#..
 | ||
|  ..###.#
 | ||
|  #...#.#
 | ||
|  .#...##
 | ||
|  #.###..
 | ||
|  ##.#.##
 | ||
|  .#..#..
 | ||
| 
 | ||
|    The scan shows Elves # and empty ground .; outside your scan, more empty ground
 | ||
|    extends a long way in every direction. The scan is oriented so that north is up;
 | ||
|    orthogonal directions are written N (north), S (south), W (west), and E (east), while
 | ||
|    diagonal directions are written NE, NW, SE, SW.
 | ||
| 
 | ||
|    The Elves follow a time-consuming process to figure out where they should each go; you
 | ||
|    can speed up this process considerably. The process consists of some number of rounds
 | ||
|    during which Elves alternate between considering where to move and actually moving.
 | ||
| 
 | ||
|    During the first half of each round, each Elf considers the eight positions adjacent
 | ||
|    to themself. If no other Elves are in one of those eight positions, the Elf does not
 | ||
|    do anything during this round. Otherwise, the Elf looks in each of four directions in
 | ||
|    the following order and proposes moving one step in the first valid direction:
 | ||
| 
 | ||
|      • If there is no Elf in the N, NE, or NW adjacent positions, the Elf proposes moving
 | ||
|        north one step.
 | ||
|      • If there is no Elf in the S, SE, or SW adjacent positions, the Elf proposes moving
 | ||
|        south one step.
 | ||
|      • If there is no Elf in the W, NW, or SW adjacent positions, the Elf proposes moving
 | ||
|        west one step.
 | ||
|      • If there is no Elf in the E, NE, or SE adjacent positions, the Elf proposes moving
 | ||
|        east one step.
 | ||
| 
 | ||
|    After each Elf has had a chance to propose a move, the second half of the round can
 | ||
|    begin. Simultaneously, each Elf moves to their proposed destination tile if they were
 | ||
|    the only Elf to propose moving to that position. If two or more Elves propose moving
 | ||
|    to the same position, none of those Elves move.
 | ||
| 
 | ||
|    Finally, at the end of the round, the first direction the Elves considered is moved to
 | ||
|    the end of the list of directions. For example, during the second round, the Elves
 | ||
|    would try proposing a move to the south first, then west, then east, then north. On
 | ||
|    the third round, the Elves would first consider west, then east, then north, then
 | ||
|    south.
 | ||
| 
 | ||
|    As a smaller example, consider just these five Elves:
 | ||
| 
 | ||
|  .....
 | ||
|  ..##.
 | ||
|  ..#..
 | ||
|  .....
 | ||
|  ..##.
 | ||
|  .....
 | ||
| 
 | ||
|    The northernmost two Elves and southernmost two Elves all propose moving north, while
 | ||
|    the middle Elf cannot move north and proposes moving south. The middle Elf proposes
 | ||
|    the same destination as the southwest Elf, so neither of them move, but the other
 | ||
|    three do:
 | ||
| 
 | ||
|  ..##.
 | ||
|  .....
 | ||
|  ..#..
 | ||
|  ...#.
 | ||
|  ..#..
 | ||
|  .....
 | ||
| 
 | ||
|    Next, the northernmost two Elves and the southernmost Elf all propose moving south. Of
 | ||
|    the remaining middle two Elves, the west one cannot move south and proposes moving
 | ||
|    west, while the east one cannot move south or west and proposes moving east. All five
 | ||
|    Elves succeed in moving to their proposed positions:
 | ||
| 
 | ||
|  .....
 | ||
|  ..##.
 | ||
|  .#...
 | ||
|  ....#
 | ||
|  .....
 | ||
|  ..#..
 | ||
| 
 | ||
|    Finally, the southernmost two Elves choose not to move at all. Of the remaining three
 | ||
|    Elves, the west one proposes moving west, the east one proposes moving east, and the
 | ||
|    middle one proposes moving north; all three succeed in moving:
 | ||
| 
 | ||
|  ..#..
 | ||
|  ....#
 | ||
|  #....
 | ||
|  ....#
 | ||
|  .....
 | ||
|  ..#..
 | ||
| 
 | ||
|    At this point, no Elves need to move, and so the process ends.
 | ||
| 
 | ||
|    The larger example above proceeds as follows:
 | ||
| 
 | ||
|  == Initial State ==
 | ||
|  ..............
 | ||
|  ..............
 | ||
|  .......#......
 | ||
|  .....###.#....
 | ||
|  ...#...#.#....
 | ||
|  ....#...##....
 | ||
|  ...#.###......
 | ||
|  ...##.#.##....
 | ||
|  ....#..#......
 | ||
|  ..............
 | ||
|  ..............
 | ||
|  ..............
 | ||
| 
 | ||
|  == End of Round 1 ==
 | ||
|  ..............
 | ||
|  .......#......
 | ||
|  .....#...#....
 | ||
|  ...#..#.#.....
 | ||
|  .......#..#...
 | ||
|  ....#.#.##....
 | ||
|  ..#..#.#......
 | ||
|  ..#.#.#.##....
 | ||
|  ..............
 | ||
|  ....#..#......
 | ||
|  ..............
 | ||
|  ..............
 | ||
| 
 | ||
|  == End of Round 2 ==
 | ||
|  ..............
 | ||
|  .......#......
 | ||
|  ....#.....#...
 | ||
|  ...#..#.#.....
 | ||
|  .......#...#..
 | ||
|  ...#..#.#.....
 | ||
|  .#...#.#.#....
 | ||
|  ..............
 | ||
|  ..#.#.#.##....
 | ||
|  ....#..#......
 | ||
|  ..............
 | ||
|  ..............
 | ||
| 
 | ||
|  == End of Round 3 ==
 | ||
|  ..............
 | ||
|  .......#......
 | ||
|  .....#....#...
 | ||
|  ..#..#...#....
 | ||
|  .......#...#..
 | ||
|  ...#..#.#.....
 | ||
|  .#..#.....#...
 | ||
|  .......##.....
 | ||
|  ..##.#....#...
 | ||
|  ...#..........
 | ||
|  .......#......
 | ||
|  ..............
 | ||
| 
 | ||
|  == End of Round 4 ==
 | ||
|  ..............
 | ||
|  .......#......
 | ||
|  ......#....#..
 | ||
|  ..#...##......
 | ||
|  ...#.....#.#..
 | ||
|  .........#....
 | ||
|  .#...###..#...
 | ||
|  ..#......#....
 | ||
|  ....##....#...
 | ||
|  ....#.........
 | ||
|  .......#......
 | ||
|  ..............
 | ||
| 
 | ||
|  == End of Round 5 ==
 | ||
|  .......#......
 | ||
|  ..............
 | ||
|  ..#..#.....#..
 | ||
|  .........#....
 | ||
|  ......##...#..
 | ||
|  .#.#.####.....
 | ||
|  ...........#..
 | ||
|  ....##..#.....
 | ||
|  ..#...........
 | ||
|  ..........#...
 | ||
|  ....#..#......
 | ||
|  ..............
 | ||
| 
 | ||
|    After a few more rounds...
 | ||
| 
 | ||
|  == End of Round 10 ==
 | ||
|  .......#......
 | ||
|  ...........#..
 | ||
|  ..#.#..#......
 | ||
|  ......#.......
 | ||
|  ...#.....#..#.
 | ||
|  .#......##....
 | ||
|  .....##.......
 | ||
|  ..#........#..
 | ||
|  ....#.#..#....
 | ||
|  ..............
 | ||
|  ....#..#..#...
 | ||
|  ..............
 | ||
| 
 | ||
|    To make sure they're on the right track, the Elves like to check after round 10 that
 | ||
|    they're making good progress toward covering enough ground. To do this, count the
 | ||
|    number of empty ground tiles contained by the smallest rectangle that contains every
 | ||
|    Elf. (The edges of the rectangle should be aligned to the N/S/E/W directions; the
 | ||
|    Elves do not have the patience to calculate arbitrary rectangles.) In the above
 | ||
|    example, that rectangle is:
 | ||
| 
 | ||
|  ......#.....
 | ||
|  ..........#.
 | ||
|  .#.#..#.....
 | ||
|  .....#......
 | ||
|  ..#.....#..#
 | ||
|  #......##...
 | ||
|  ....##......
 | ||
|  .#........#.
 | ||
|  ...#.#..#...
 | ||
|  ............
 | ||
|  ...#..#..#..
 | ||
| 
 | ||
|    In this region, the number of empty ground tiles is 110.
 | ||
| 
 | ||
|    Simulate the Elves' process and find the smallest rectangle that contains the Elves
 | ||
|    after 10 rounds. How many empty ground tiles does that rectangle contain?
 | ||
| 
 | ||
|    Your puzzle answer was 4000.
 | ||
| 
 | ||
| --- Part Two ---
 | ||
| 
 | ||
|    It seems you're on the right track. Finish simulating the process and figure out where
 | ||
|    the Elves need to go. How many rounds did you save them?
 | ||
| 
 | ||
|    In the example above, the first round where no Elf moved was round 20:
 | ||
| 
 | ||
|  .......#......
 | ||
|  ....#......#..
 | ||
|  ..#.....#.....
 | ||
|  ......#.......
 | ||
|  ...#....#.#..#
 | ||
|  #.............
 | ||
|  ....#.....#...
 | ||
|  ..#.....#.....
 | ||
|  ....#.#....#..
 | ||
|  .........#....
 | ||
|  ....#......#..
 | ||
|  .......#......
 | ||
| 
 | ||
|    Figure out where the Elves need to go. What is the number of the first round where no
 | ||
|    Elf moves?
 | ||
| 
 | ||
|    Your puzzle answer was 1040.
 | ||
| 
 | ||
|    Both parts of this puzzle are complete! They provide two gold stars: **
 | ||
| 
 | ||
| References
 | ||
| 
 | ||
|    Visible links
 | ||
|    . https://adventofcode.com/
 | ||
|    . https://adventofcode.com/2022/about
 | ||
|    . https://adventofcode.com/2022/events
 | ||
|    . https://adventofcode.com/2022/settings
 | ||
|    . https://adventofcode.com/2022/auth/logout
 | ||
|    . Advent of Code Supporter
 | ||
| 	https://adventofcode.com/2022/support
 | ||
|    . https://adventofcode.com/2022
 | ||
|    . https://adventofcode.com/2022
 | ||
|    . https://adventofcode.com/2022/support
 | ||
|    . https://adventofcode.com/2022/sponsors
 | ||
|    . https://adventofcode.com/2022/leaderboard
 | ||
|    . https://adventofcode.com/2022/stats
 | ||
|    . https://adventofcode.com/2022/sponsors
 | ||
|    . https://adventofcode.com/2022
 | ||
|    . https://adventofcode.com/2022/day/23/input
 |