147 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Advent of Code
 | |
| 
 | |
| --- Day 17: Reservoir Research ---
 | |
| 
 | |
|    You arrive in the year 18. If it weren't for the coat you got in 1018, you
 | |
|    would be very cold: the North Pole base hasn't even been constructed.
 | |
| 
 | |
|    Rather, it hasn't been constructed yet. The Elves are making a little
 | |
|    progress, but there's not a lot of liquid water in this climate, so they're
 | |
|    getting very dehydrated. Maybe there's more underground?
 | |
| 
 | |
|    You scan a two-dimensional vertical slice of the ground nearby and discover
 | |
|    that it is mostly sand with veins of clay. The scan only provides data with
 | |
|    a granularity of square meters, but it should be good enough to determine
 | |
|    how much water is trapped there. In the scan, x represents the distance to
 | |
|    the right, and y represents the distance down. There is also a spring of
 | |
|    water near the surface at x=500, y=0. The scan identifies which square
 | |
|    meters are clay (your puzzle input).
 | |
| 
 | |
|    For example, suppose your scan shows the following veins of clay:
 | |
| 
 | |
|  x=495, y=2..7 y=7, x=495..501 x=501, y=3..7 x=498, y=2..4 x=506, y=1..2 x=498,
 | |
|  y=10..13 x=504, y=10..13 y=13, x=498..504
 | |
| 
 | |
|    Rendering clay as #, sand as ., and the water spring as +, and with x
 | |
|    increasing to the right and y increasing downward, this becomes:
 | |
| 
 | |
|     44444455555555 99999900000000 45678901234567 0 ......+....... 1
 | |
|     ............#. 2 .#..#.......#. 3 .#..#..#...... 4 .#..#..#...... 5
 | |
|     .#.....#...... 6 .#.....#...... 7 .#######...... 8 .............. 9
 | |
|     .............. 10 ....#.....#... 11 ....#.....#... 12 ....#.....#... 13
 | |
|     ....#######...
 | |
| 
 | |
|    The spring of water will produce water forever. Water can move through sand,
 | |
|    but is blocked by clay. Water always moves down when possible, and spreads
 | |
|    to the left and right otherwise, filling space that has clay on both sides
 | |
|    and falling out otherwise.
 | |
| 
 | |
|    For example, if five squares of water are created, they will flow downward
 | |
|    until they reach the clay and settle there. Water that has come to rest is
 | |
|    shown here as ~, while sand through which water has passed (but which is now
 | |
|    dry again) is shown as |:
 | |
| 
 | |
|  ......+....... ......|.....#. .#..#.|.....#. .#..#.|#...... .#..#.|#......
 | |
|  .#....|#...... .#~~~~~#...... .#######...... .............. ..............
 | |
|  ....#.....#... ....#.....#... ....#.....#... ....#######...
 | |
| 
 | |
|    Two squares of water can't occupy the same location. If another five squares
 | |
|    of water are created, they will settle on the first five, filling the clay
 | |
|    reservoir a little more:
 | |
| 
 | |
|  ......+....... ......|.....#. .#..#.|.....#. .#..#.|#...... .#..#.|#......
 | |
|  .#~~~~~#...... .#~~~~~#...... .#######...... .............. ..............
 | |
|  ....#.....#... ....#.....#... ....#.....#... ....#######...
 | |
| 
 | |
|    Water pressure does not apply in this scenario. If another four squares of
 | |
|    water are created, they will stay on the right side of the barrier, and no
 | |
|    water will reach the left side:
 | |
| 
 | |
|  ......+....... ......|.....#. .#..#.|.....#. .#..#~~#...... .#..#~~#......
 | |
|  .#~~~~~#...... .#~~~~~#...... .#######...... .............. ..............
 | |
|  ....#.....#... ....#.....#... ....#.....#... ....#######...
 | |
| 
 | |
|    At this point, the top reservoir overflows. While water can reach the tiles
 | |
|    above the surface of the water, it cannot settle there, and so the next five
 | |
|    squares of water settle like this:
 | |
| 
 | |
|  ......+....... ......|.....#. .#..#||||...#. .#..#~~#|..... .#..#~~#|.....
 | |
|  .#~~~~~#|..... .#~~~~~#|..... .#######|..... ........|..... ........|.....
 | |
|  ....#...|.#... ....#...|.#... ....#~~~~~#... ....#######...
 | |
| 
 | |
|    Note especially the leftmost |: the new squares of water can reach this
 | |
|    tile, but cannot stop there. Instead, eventually, they all fall to the right
 | |
|    and settle in the reservoir below.
 | |
| 
 | |
|    After 10 more squares of water, the bottom reservoir is also full:
 | |
| 
 | |
|  ......+....... ......|.....#. .#..#||||...#. .#..#~~#|..... .#..#~~#|.....
 | |
|  .#~~~~~#|..... .#~~~~~#|..... .#######|..... ........|..... ........|.....
 | |
|  ....#~~~~~#... ....#~~~~~#... ....#~~~~~#... ....#######...
 | |
| 
 | |
|    Finally, while there is nowhere left for the water to settle, it can reach a
 | |
|    few more tiles before overflowing beyond the bottom of the scanned data:
 | |
| 
 | |
|  ......+.......    (line not counted: above minimum y value) ......|.....#.
 | |
|  .#..#||||...#. .#..#~~#|..... .#..#~~#|..... .#~~~~~#|..... .#~~~~~#|.....
 | |
|  .#######|..... ........|..... ...|||||||||.. ...|#~~~~~#|.. ...|#~~~~~#|..
 | |
|  ...|#~~~~~#|.. ...|#######|.. ...|.......|..    (line not counted: below
 | |
|  maximum y value) ...|.......|..    (line not counted: below maximum y value)
 | |
|  ...|.......|..    (line not counted: below maximum y value)
 | |
| 
 | |
|    How many tiles can be reached by the water? To prevent counting forever,
 | |
|    ignore tiles with a y coordinate smaller than the smallest y coordinate in
 | |
|    your scan data or larger than the largest one. Any x coordinate is valid. In
 | |
|    this example, the lowest y coordinate given is 1, and the highest is 13,
 | |
|    causing the water spring (in row 0) and the water falling off the bottom of
 | |
|    the render (in rows 14 through infinity) to be ignored.
 | |
| 
 | |
|    So, in the example above, counting both water at rest (~) and other sand
 | |
|    tiles the water can hypothetically reach (|), the total number of tiles the
 | |
|    water can reach is 57.
 | |
| 
 | |
|    How many tiles can the water reach within the range of y values in your
 | |
|    scan?
 | |
| 
 | |
|    Your puzzle answer was 33242.
 | |
| 
 | |
| --- Part Two ---
 | |
| 
 | |
|    After a very long time, the water spring will run dry. How much water will
 | |
|    be retained?
 | |
| 
 | |
|    In the example above, water that won't eventually drain out is shown as ~, a
 | |
|    total of 29 tiles.
 | |
| 
 | |
|    How many water tiles are left after the water spring stops producing water
 | |
|    and all remaining water not at rest has drained?
 | |
| 
 | |
|    Your puzzle answer was 27256.
 | |
| 
 | |
|    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/2018/about
 | |
|    . https://adventofcode.com/2018/events
 | |
|    . https://adventofcode.com/2018/settings
 | |
|    . https://adventofcode.com/2018/auth/logout
 | |
|    . Advent of Code Supporter
 | |
| 	https://adventofcode.com/2018/support
 | |
|    . https://adventofcode.com/2018
 | |
|    . https://adventofcode.com/2018
 | |
|    . https://adventofcode.com/2018/support
 | |
|    . https://adventofcode.com/2018/sponsors
 | |
|    . https://adventofcode.com/2018/leaderboard
 | |
|    . https://adventofcode.com/2018/stats
 | |
|    . https://adventofcode.com/2018/sponsors
 | |
|    . https://adventofcode.com/2018
 | |
|    . https://adventofcode.com/2018/day/17/input
 |