214 lines
6.8 KiB
Plaintext
214 lines
6.8 KiB
Plaintext
Advent of Code
|
|
br0xen (AoC++) 28*
|
|
|
|
--- Day 14: Regolith Reservoir ---
|
|
|
|
The distress signal leads you to a giant waterfall! Actually, hang on - the signal seems like it's coming from the
|
|
waterfall itself, and that doesn't make any sense. However, you do notice a little path that leads behind the waterfall.
|
|
|
|
Correction: the distress signal leads you behind a giant waterfall! There seems to be a large cave system here, and the
|
|
signal definitely leads further inside.
|
|
|
|
As you begin to make your way deeper underground, you feel the ground rumble for a moment. Sand begins pouring into the
|
|
cave! If you don't quickly figure out where the sand is going, you could quickly become trapped!
|
|
|
|
Fortunately, your familiarity with analyzing the path of falling material will come in handy here. You scan a
|
|
two-dimensional vertical slice of the cave above you (your puzzle input) and discover that it is mostly air with
|
|
structures made of rock.
|
|
|
|
Your scan traces the path of each solid rock structure and reports the x,y coordinates that form the shape of the path,
|
|
where x represents distance to the right and y represents distance down. Each path appears as a single line of text in
|
|
your scan. After the first point of each path, each point indicates the end of a straight horizontal or vertical line to
|
|
be drawn from the previous point. For example:
|
|
|
|
498,4 -> 498,6 -> 496,6
|
|
503,4 -> 502,4 -> 502,9 -> 494,9
|
|
|
|
This scan means that there are two paths of rock; the first path consists of two straight lines, and the second path
|
|
consists of three straight lines. (Specifically, the first path consists of a line of rock from 498,4 through 498,6 and
|
|
another line of rock from 498,6 through 496,6.)
|
|
|
|
The sand is pouring into the cave from point 500,0.
|
|
|
|
Drawing rock as #, air as ., and the source of the sand as +, this becomes:
|
|
|
|
4 5 5
|
|
9 0 0
|
|
4 0 3
|
|
0 ......+...
|
|
1 ..........
|
|
2 ..........
|
|
3 ..........
|
|
4 ....#...##
|
|
5 ....#...#.
|
|
6 ..###...#.
|
|
7 ........#.
|
|
8 ........#.
|
|
9 #########.
|
|
|
|
Sand is produced one unit at a time, and the next unit of sand is not produced until the previous unit of sand comes to
|
|
rest. A unit of sand is large enough to fill one tile of air in your scan.
|
|
|
|
A unit of sand always falls down one step if possible. If the tile immediately below is blocked (by rock or sand), the
|
|
unit of sand attempts to instead move diagonally one step down and to the left. If that tile is blocked, the unit of
|
|
sand attempts to instead move diagonally one step down and to the right. Sand keeps moving as long as it is able to do
|
|
so, at each step trying to move down, then down-left, then down-right. If all three possible destinations are blocked,
|
|
the unit of sand comes to rest and no longer moves, at which point the next unit of sand is created back at the source.
|
|
|
|
So, drawing sand that has come to rest as o, the first unit of sand simply falls straight down and then stops:
|
|
|
|
......+...
|
|
..........
|
|
..........
|
|
..........
|
|
....#...##
|
|
....#...#.
|
|
..###...#.
|
|
........#.
|
|
......o.#.
|
|
#########.
|
|
|
|
The second unit of sand then falls straight down, lands on the first one, and then comes to rest to its left:
|
|
|
|
......+...
|
|
..........
|
|
..........
|
|
..........
|
|
....#...##
|
|
....#...#.
|
|
..###...#.
|
|
........#.
|
|
.....oo.#.
|
|
#########.
|
|
|
|
After a total of five units of sand have come to rest, they form this pattern:
|
|
|
|
......+...
|
|
..........
|
|
..........
|
|
..........
|
|
....#...##
|
|
....#...#.
|
|
..###...#.
|
|
......o.#.
|
|
....oooo#.
|
|
#########.
|
|
|
|
After a total of 22 units of sand:
|
|
|
|
......+...
|
|
..........
|
|
......o...
|
|
.....ooo..
|
|
....#ooo##
|
|
....#ooo#.
|
|
..###ooo#.
|
|
....oooo#.
|
|
...ooooo#.
|
|
#########.
|
|
|
|
Finally, only two more units of sand can possibly come to rest:
|
|
|
|
......+...
|
|
..........
|
|
......o...
|
|
.....ooo..
|
|
....#ooo##
|
|
...o#ooo#.
|
|
..###ooo#.
|
|
....oooo#.
|
|
.o.ooooo#.
|
|
#########.
|
|
|
|
Once all 24 units of sand shown above have come to rest, all further sand flows out the bottom, falling into the endless
|
|
void. Just for fun, the path any new sand takes before falling forever is shown here with ~:
|
|
|
|
.......+...
|
|
.......~...
|
|
......~o...
|
|
.....~ooo..
|
|
....~#ooo##
|
|
...~o#ooo#.
|
|
..~###ooo#.
|
|
..~..oooo#.
|
|
.~o.ooooo#.
|
|
~#########.
|
|
~..........
|
|
~..........
|
|
~..........
|
|
|
|
Using your scan, simulate the falling sand. How many units of sand come to rest before sand starts flowing into the
|
|
abyss below?
|
|
|
|
Your puzzle answer was 757.
|
|
|
|
--- Part Two ---
|
|
|
|
You realize you misread the scan. There isn't an endless void at the bottom of the scan - there's floor, and you're
|
|
standing on it!
|
|
|
|
You don't have time to scan the floor, so assume the floor is an infinite horizontal line with a y coordinate equal to
|
|
two plus the highest y coordinate of any point in your scan.
|
|
|
|
In the example above, the highest y coordinate of any point is 9, and so the floor is at y=11. (This is as if your scan
|
|
contained one extra rock path like -infinity,11 -> infinity,11.) With the added floor, the example above now looks like
|
|
this:
|
|
|
|
...........+........
|
|
....................
|
|
....................
|
|
....................
|
|
.........#...##.....
|
|
.........#...#......
|
|
.......###...#......
|
|
.............#......
|
|
.............#......
|
|
.....#########......
|
|
....................
|
|
<-- etc #################### etc -->
|
|
|
|
To find somewhere safe to stand, you'll need to simulate falling sand until a unit of sand comes to rest at 500,0,
|
|
blocking the source entirely and stopping the flow of sand into the cave. In the example above, the situation finally
|
|
looks like this after 93 units of sand come to rest:
|
|
|
|
............o............
|
|
...........ooo...........
|
|
..........ooooo..........
|
|
.........ooooooo.........
|
|
........oo#ooo##o........
|
|
.......ooo#ooo#ooo.......
|
|
......oo###ooo#oooo......
|
|
.....oooo.oooo#ooooo.....
|
|
....oooooooooo#oooooo....
|
|
...ooo#########ooooooo...
|
|
..ooooo.......ooooooooo..
|
|
#########################
|
|
|
|
Using your scan, simulate the falling sand until the source of the sand becomes blocked. How many units of sand come to
|
|
rest?
|
|
|
|
Your puzzle answer was 24943.
|
|
|
|
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/2018/day/17
|
|
. https://adventofcode.com/2022
|
|
. https://adventofcode.com/2022/day/14/input
|