175 lines
4.4 KiB
Org Mode
175 lines
4.4 KiB
Org Mode
** --- 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 [[/2018/day/17][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:
|
|
|
|
#+begin_example
|
|
498,4 -> 498,6 -> 496,6
|
|
503,4 -> 502,4 -> 502,9 -> 494,9
|
|
#+end_example
|
|
|
|
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:
|
|
|
|
#+begin_example
|
|
4 5 5
|
|
9 0 0
|
|
4 0 3
|
|
0 ......+...
|
|
1 ..........
|
|
2 ..........
|
|
3 ..........
|
|
4 ....#...##
|
|
5 ....#...#.
|
|
6 ..###...#.
|
|
7 ........#.
|
|
8 ........#.
|
|
9 #########.
|
|
#+end_example
|
|
|
|
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:
|
|
|
|
#+begin_example
|
|
......+...
|
|
..........
|
|
..........
|
|
..........
|
|
....#...##
|
|
....#...#.
|
|
..###...#.
|
|
........#.
|
|
......o.#.
|
|
#########.
|
|
#+end_example
|
|
|
|
The second unit of sand then falls straight down, lands on the first
|
|
one, and then comes to rest to its left:
|
|
|
|
#+begin_example
|
|
......+...
|
|
..........
|
|
..........
|
|
..........
|
|
....#...##
|
|
....#...#.
|
|
..###...#.
|
|
........#.
|
|
.....oo.#.
|
|
#########.
|
|
#+end_example
|
|
|
|
After a total of five units of sand have come to rest, they form this
|
|
pattern:
|
|
|
|
#+begin_example
|
|
......+...
|
|
..........
|
|
..........
|
|
..........
|
|
....#...##
|
|
....#...#.
|
|
..###...#.
|
|
......o.#.
|
|
....oooo#.
|
|
#########.
|
|
#+end_example
|
|
|
|
After a total of 22 units of sand:
|
|
|
|
#+begin_example
|
|
......+...
|
|
..........
|
|
......o...
|
|
.....ooo..
|
|
....#ooo##
|
|
....#ooo#.
|
|
..###ooo#.
|
|
....oooo#.
|
|
...ooooo#.
|
|
#########.
|
|
#+end_example
|
|
|
|
Finally, only two more units of sand can possibly come to rest:
|
|
|
|
#+begin_example
|
|
......+...
|
|
..........
|
|
......o...
|
|
.....ooo..
|
|
....#ooo##
|
|
...o#ooo#.
|
|
..###ooo#.
|
|
....oooo#.
|
|
.o.ooooo#.
|
|
#########.
|
|
#+end_example
|
|
|
|
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
|
|
=~=:
|
|
|
|
#+begin_example
|
|
.......+...
|
|
.......~...
|
|
......~o...
|
|
.....~ooo..
|
|
....~#ooo##
|
|
...~o#ooo#.
|
|
..~###ooo#.
|
|
..~..oooo#.
|
|
.~o.ooooo#.
|
|
~#########.
|
|
~..........
|
|
~..........
|
|
~..........
|
|
#+end_example
|
|
|
|
Using your scan, simulate the falling sand. /How many units of sand come
|
|
to rest before sand starts flowing into the abyss below?/
|