244 lines
6.0 KiB
Plaintext
244 lines
6.0 KiB
Plaintext
|
Advent of Code
|
|||
|
|
|||
|
--- Day 11: Seating System ---
|
|||
|
|
|||
|
Your plane lands with plenty of time to spare. The final leg of your journey is a ferry that goes directly to the tropical island where you can finally start your vacation. As you reach the waiting area to board the ferry, you realize you're so
|
|||
|
early, nobody else has even arrived yet!
|
|||
|
|
|||
|
By modeling the process people use to choose (or abandon) their seat in the waiting area, you're pretty sure you can predict the best place to sit. You make a quick map of the seat layout (your puzzle input).
|
|||
|
|
|||
|
The seat layout fits neatly on a grid. Each position is either floor (.), an empty seat (L), or an occupied seat (#). For example, the initial seat layout might look like this:
|
|||
|
|
|||
|
L.LL.LL.LL
|
|||
|
LLLLLLL.LL
|
|||
|
L.L.L..L..
|
|||
|
LLLL.LL.LL
|
|||
|
L.LL.LL.LL
|
|||
|
L.LLLLL.LL
|
|||
|
..L.L.....
|
|||
|
LLLLLLLLLL
|
|||
|
L.LLLLLL.L
|
|||
|
L.LLLLL.LL
|
|||
|
|
|||
|
Now, you just need to model the people who will be arriving shortly. Fortunately, people are entirely predictable and always follow a simple set of rules. All decisions are based on the number of occupied seats adjacent to a given seat (one of
|
|||
|
the eight positions immediately up, down, left, right, or diagonal from the seat). The following rules are applied to every seat simultaneously:
|
|||
|
|
|||
|
• If a seat is empty (L) and there are no occupied seats adjacent to it, the seat becomes occupied.
|
|||
|
• If a seat is occupied (#) and four or more seats adjacent to it are also occupied, the seat becomes empty.
|
|||
|
• Otherwise, the seat's state does not change.
|
|||
|
|
|||
|
Floor (.) never changes; seats don't move, and nobody sits on the floor.
|
|||
|
|
|||
|
After one round of these rules, every seat in the example layout becomes occupied:
|
|||
|
|
|||
|
#.##.##.##
|
|||
|
#######.##
|
|||
|
#.#.#..#..
|
|||
|
####.##.##
|
|||
|
#.##.##.##
|
|||
|
#.#####.##
|
|||
|
..#.#.....
|
|||
|
##########
|
|||
|
#.######.#
|
|||
|
#.#####.##
|
|||
|
|
|||
|
After a second round, the seats with four or more occupied adjacent seats become empty again:
|
|||
|
|
|||
|
#.LL.L#.##
|
|||
|
#LLLLLL.L#
|
|||
|
L.L.L..L..
|
|||
|
#LLL.LL.L#
|
|||
|
#.LL.LL.LL
|
|||
|
#.LLLL#.##
|
|||
|
..L.L.....
|
|||
|
#LLLLLLLL#
|
|||
|
#.LLLLLL.L
|
|||
|
#.#LLLL.##
|
|||
|
|
|||
|
This process continues for three more rounds:
|
|||
|
|
|||
|
#.##.L#.##
|
|||
|
#L###LL.L#
|
|||
|
L.#.#..#..
|
|||
|
#L##.##.L#
|
|||
|
#.##.LL.LL
|
|||
|
#.###L#.##
|
|||
|
..#.#.....
|
|||
|
#L######L#
|
|||
|
#.LL###L.L
|
|||
|
#.#L###.##
|
|||
|
|
|||
|
#.#L.L#.##
|
|||
|
#LLL#LL.L#
|
|||
|
L.L.L..#..
|
|||
|
#LLL.##.L#
|
|||
|
#.LL.LL.LL
|
|||
|
#.LL#L#.##
|
|||
|
..L.L.....
|
|||
|
#L#LLLL#L#
|
|||
|
#.LLLLLL.L
|
|||
|
#.#L#L#.##
|
|||
|
|
|||
|
#.#L.L#.##
|
|||
|
#LLL#LL.L#
|
|||
|
L.#.L..#..
|
|||
|
#L##.##.L#
|
|||
|
#.#L.LL.LL
|
|||
|
#.#L#L#.##
|
|||
|
..L.L.....
|
|||
|
#L#L##L#L#
|
|||
|
#.LLLLLL.L
|
|||
|
#.#L#L#.##
|
|||
|
|
|||
|
At this point, something interesting happens: the chaos stabilizes and further applications of these rules cause no seats to change state! Once people stop moving around, you count 37 occupied seats.
|
|||
|
|
|||
|
Simulate your seating area by applying the seating rules repeatedly until no seats change state. How many seats end up occupied?
|
|||
|
|
|||
|
Your puzzle answer was 2265.
|
|||
|
|
|||
|
--- Part Two ---
|
|||
|
|
|||
|
As soon as people start to arrive, you realize your mistake. People don't just care about adjacent seats - they care about the first seat they can see in each of those eight directions!
|
|||
|
|
|||
|
Now, instead of considering just the eight immediately adjacent seats, consider the first seat in each of those eight directions. For example, the empty seat below would see eight occupied seats:
|
|||
|
|
|||
|
.......#.
|
|||
|
...#.....
|
|||
|
.#.......
|
|||
|
.........
|
|||
|
..#L....#
|
|||
|
....#....
|
|||
|
.........
|
|||
|
#........
|
|||
|
...#.....
|
|||
|
|
|||
|
The leftmost empty seat below would only see one empty seat, but cannot see any of the occupied ones:
|
|||
|
|
|||
|
.............
|
|||
|
.L.L.#.#.#.#.
|
|||
|
.............
|
|||
|
|
|||
|
The empty seat below would see no occupied seats:
|
|||
|
|
|||
|
.##.##.
|
|||
|
#.#.#.#
|
|||
|
##...##
|
|||
|
...L...
|
|||
|
##...##
|
|||
|
#.#.#.#
|
|||
|
.##.##.
|
|||
|
|
|||
|
Also, people seem to be more tolerant than you expected: it now takes five or more visible occupied seats for an occupied seat to become empty (rather than four or more from the previous rules). The other rules still apply: empty seats that see
|
|||
|
no occupied seats become occupied, seats matching no rule don't change, and floor never changes.
|
|||
|
|
|||
|
Given the same starting layout as above, these new rules cause the seating area to shift around as follows:
|
|||
|
|
|||
|
L.LL.LL.LL
|
|||
|
LLLLLLL.LL
|
|||
|
L.L.L..L..
|
|||
|
LLLL.LL.LL
|
|||
|
L.LL.LL.LL
|
|||
|
L.LLLLL.LL
|
|||
|
..L.L.....
|
|||
|
LLLLLLLLLL
|
|||
|
L.LLLLLL.L
|
|||
|
L.LLLLL.LL
|
|||
|
|
|||
|
#.##.##.##
|
|||
|
#######.##
|
|||
|
#.#.#..#..
|
|||
|
####.##.##
|
|||
|
#.##.##.##
|
|||
|
#.#####.##
|
|||
|
..#.#.....
|
|||
|
##########
|
|||
|
#.######.#
|
|||
|
#.#####.##
|
|||
|
|
|||
|
#.LL.LL.L#
|
|||
|
#LLLLLL.LL
|
|||
|
L.L.L..L..
|
|||
|
LLLL.LL.LL
|
|||
|
L.LL.LL.LL
|
|||
|
L.LLLLL.LL
|
|||
|
..L.L.....
|
|||
|
LLLLLLLLL#
|
|||
|
#.LLLLLL.L
|
|||
|
#.LLLLL.L#
|
|||
|
|
|||
|
#.L#.##.L#
|
|||
|
#L#####.LL
|
|||
|
L.#.#..#..
|
|||
|
##L#.##.##
|
|||
|
#.##.#L.##
|
|||
|
#.#####.#L
|
|||
|
..#.#.....
|
|||
|
LLL####LL#
|
|||
|
#.L#####.L
|
|||
|
#.L####.L#
|
|||
|
|
|||
|
#.L#.L#.L#
|
|||
|
#LLLLLL.LL
|
|||
|
L.L.L..#..
|
|||
|
##LL.LL.L#
|
|||
|
L.LL.LL.L#
|
|||
|
#.LLLLL.LL
|
|||
|
..L.L.....
|
|||
|
LLLLLLLLL#
|
|||
|
#.LLLLL#.L
|
|||
|
#.L#LL#.L#
|
|||
|
|
|||
|
#.L#.L#.L#
|
|||
|
#LLLLLL.LL
|
|||
|
L.L.L..#..
|
|||
|
##L#.#L.L#
|
|||
|
L.L#.#L.L#
|
|||
|
#.L####.LL
|
|||
|
..#.#.....
|
|||
|
LLL###LLL#
|
|||
|
#.LLLLL#.L
|
|||
|
#.L#LL#.L#
|
|||
|
|
|||
|
#.L#.L#.L#
|
|||
|
#LLLLLL.LL
|
|||
|
L.L.L..#..
|
|||
|
##L#.#L.L#
|
|||
|
L.L#.LL.L#
|
|||
|
#.LLLL#.LL
|
|||
|
..#.L.....
|
|||
|
LLL###LLL#
|
|||
|
#.LLLLL#.L
|
|||
|
#.L#LL#.L#
|
|||
|
|
|||
|
Again, at this point, people stop shifting around and the seating area reaches equilibrium. Once this occurs, you count 26 occupied seats.
|
|||
|
|
|||
|
Given the new visibility method and the rule change for occupied seats becoming empty, once equilibrium is reached, how many seats end up occupied?
|
|||
|
|
|||
|
Your puzzle answer was 2045.
|
|||
|
|
|||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
|||
|
|
|||
|
At this point, you should return to your Advent calendar and try another puzzle.
|
|||
|
|
|||
|
If you still want to see it, you can get your puzzle input.
|
|||
|
|
|||
|
References
|
|||
|
|
|||
|
Visible links
|
|||
|
. https://adventofcode.com/
|
|||
|
. https://adventofcode.com/2020/about
|
|||
|
. https://adventofcode.com/2020/events
|
|||
|
. https://adventofcode.com/2020/settings
|
|||
|
. https://adventofcode.com/2020/auth/logout
|
|||
|
. Advent of Code Supporter
|
|||
|
https://adventofcode.com/2020/support
|
|||
|
. https://adventofcode.com/2020
|
|||
|
. https://adventofcode.com/2020
|
|||
|
. https://adventofcode.com/2020/support
|
|||
|
. https://adventofcode.com/2020/sponsors
|
|||
|
. https://adventofcode.com/2020/leaderboard
|
|||
|
. https://adventofcode.com/2020/stats
|
|||
|
. https://adventofcode.com/2020/sponsors
|
|||
|
. https://adventofcode.com/2020
|
|||
|
. https://adventofcode.com/2020/day/11/input
|