246 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Advent of Code
 | ||
| 
 | ||
| --- Day 22: Mode Maze ---
 | ||
| 
 | ||
|    This is it, your final stop: the year -483. It's snowing and dark outside;
 | ||
|    the only light you can see is coming from a small cottage in the distance.
 | ||
|    You make your way there and knock on the door.
 | ||
| 
 | ||
|    A portly man with a large, white beard answers the door and invites you
 | ||
|    inside. For someone living near the North Pole in -483, he must not get many
 | ||
|    visitors, but he doesn't act surprised to see you. Instead, he offers you
 | ||
|    some milk and cookies.
 | ||
| 
 | ||
|    After talking for a while, he asks a favor of you. His friend hasn't come
 | ||
|    back in a few hours, and he's not sure where he is. Scanning the region
 | ||
|    briefly, you discover one life signal in a cave system nearby; his friend
 | ||
|    must have taken shelter there. The man asks if you can go there to retrieve
 | ||
|    his friend.
 | ||
| 
 | ||
|    The cave is divided into square regions which are either dominantly rocky,
 | ||
|    narrow, or wet (called its type). Each region occupies exactly one
 | ||
|    coordinate in X,Y format where X and Y are integers and zero or greater.
 | ||
|    (Adjacent regions can be the same type.)
 | ||
| 
 | ||
|    The scan (your puzzle input) is not very detailed: it only reveals the depth
 | ||
|    of the cave system and the coordinates of the target. However, it does not
 | ||
|    reveal the type of each region. The mouth of the cave is at 0,0.
 | ||
| 
 | ||
|    The man explains that due to the unusual geology in the area, there is a
 | ||
|    method to determine any region's type based on its erosion level. The
 | ||
|    erosion level of a region can be determined from its geologic index. The
 | ||
|    geologic index can be determined using the first rule that applies from the
 | ||
|    list below:
 | ||
| 
 | ||
|      • The region at 0,0 (the mouth of the cave) has a geologic index of 0.
 | ||
|      • The region at the coordinates of the target has a geologic index of 0.
 | ||
|      • If the region's Y coordinate is 0, the geologic index is its X
 | ||
|      coordinate times 16807. • If the region's X coordinate is 0, the geologic
 | ||
|      index is its Y coordinate times 48271. • Otherwise, the region's geologic
 | ||
|      index is the result of multiplying the erosion levels of the regions at
 | ||
|      X-1,Y and X,Y-1.
 | ||
| 
 | ||
|    A region's erosion level is its geologic index plus the cave system's depth,
 | ||
|    all modulo 20183. Then:
 | ||
| 
 | ||
|      • If the erosion level modulo 3 is 0, the region's type is rocky. • If the
 | ||
|      erosion level modulo 3 is 1, the region's type is wet. • If the erosion
 | ||
|      level modulo 3 is 2, the region's type is narrow.
 | ||
| 
 | ||
|    For example, suppose the cave system's depth is 510 and the target's
 | ||
|    coordinates are 10,10. Using % to represent the modulo operator, the cavern
 | ||
|    would look as follows:
 | ||
| 
 | ||
|      • At 0,0, the geologic index is 0. The erosion level is (0 + 510) % 20183
 | ||
|      = 510. The type is 510 % 3 = 0, rocky. • At 1,0, because the Y coordinate
 | ||
|      is 0, the geologic index is 1 * 16807 = 16807. The erosion level is (16807
 | ||
|      + 510) % 20183 = 17317. The type is 17317 % 3 = 1, wet. • At 0,1, because
 | ||
|      the X coordinate is 0, the geologic index is 1 * 48271 = 48271. The
 | ||
|      erosion level is (48271 + 510) % 20183 = 8415. The type is 8415 % 3 = 0,
 | ||
|      rocky. • At 1,1, neither coordinate is 0 and it is not the coordinate of
 | ||
|      the target, so the geologic index is the erosion level of 0,1 (8415) times
 | ||
|      the erosion level of 1,0 (17317), 8415
 | ||
|        * 17317 = 145722555. The erosion level is (145722555 + 510) % 20183 =
 | ||
|        * 1805. The type is 1805 % 3 = 2, narrow.
 | ||
|      • At 10,10, because they are the target's coordinates, the geologic index
 | ||
|      is 0. The erosion level is (0 + 510) % 20183 = 510. The type is 510 % 3 =
 | ||
|      0, rocky.
 | ||
| 
 | ||
|    Drawing this same cave system with rocky as ., wet as =, narrow as |, the
 | ||
|    mouth as M, the target as T, with 0,0 in the top-left corner, X increasing
 | ||
|    to the right, and Y increasing downward, the top-left corner of the map
 | ||
|    looks like this:
 | ||
| 
 | ||
|  M=.|=.|.|=.|=|=. .|=|=|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..===..=|.|||. .======|||=|=.|= .===|=|===T===|| =|||...|==..|=.|
 | ||
|  =.=|=.=..=.||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|    Before you go in, you should determine the risk level of the area. For the
 | ||
|    rectangle that has a top-left corner of region 0,0 and a bottom-right corner
 | ||
|    of the region containing the target, add up the risk level of each
 | ||
|    individual region: 0 for rocky regions, 1 for wet regions, and 2 for narrow
 | ||
|    regions.
 | ||
| 
 | ||
|    In the cave system above, because the mouth is at 0,0 and the target is at
 | ||
|    10,10, adding up the risk level of all regions with an X coordinate from 0
 | ||
|    to 10 and a Y coordinate from 0 to 10, this total is 114.
 | ||
| 
 | ||
|    What is the total risk level for the smallest rectangle that includes 0,0
 | ||
|    and the target's coordinates?
 | ||
| 
 | ||
|    Your puzzle answer was 10603.
 | ||
| 
 | ||
| --- Part Two ---
 | ||
| 
 | ||
|    Okay, it's time to go rescue the man's friend.
 | ||
| 
 | ||
|    As you leave, he hands you some tools: a torch and some climbing gear. You
 | ||
|    can't equip both tools at once, but you can choose to use neither.
 | ||
| 
 | ||
|    Tools can only be used in certain regions:
 | ||
| 
 | ||
|      • In rocky regions, you can use the climbing gear or the torch. You cannot
 | ||
|      use neither (you'll likely slip and fall). • In wet regions, you can use
 | ||
|      the climbing gear or neither tool. You cannot use the torch (if it gets
 | ||
|      wet, you won't have a light source). • In narrow regions, you can use the
 | ||
|      torch or neither tool. You cannot use the climbing gear (it's too bulky to
 | ||
|      fit).
 | ||
| 
 | ||
|    You start at 0,0 (the mouth of the cave) with the torch equipped and must
 | ||
|    reach the target coordinates as quickly as possible. The regions with
 | ||
|    negative X or Y are solid rock and cannot be traversed. The fastest route
 | ||
|    might involve entering regions beyond the X or Y coordinate of the target.
 | ||
| 
 | ||
|    You can move to an adjacent region (up, down, left, or right; never
 | ||
|    diagonally) if your currently equipped tool allows you to enter that region.
 | ||
|    Moving to an adjacent region takes one minute. (For example, if you have the
 | ||
|    torch equipped, you can move between rocky and narrow regions, but cannot
 | ||
|    enter wet regions.)
 | ||
| 
 | ||
|    You can change your currently equipped tool or put both away if your new
 | ||
|    equipment would be valid for your current region. Switching to using the
 | ||
|    climbing gear, torch, or neither always takes seven minutes, regardless of
 | ||
|    which tools you start with. (For example, if you are in a rocky region, you
 | ||
|    can switch from the torch to the climbing gear, but you cannot switch to
 | ||
|    neither.)
 | ||
| 
 | ||
|    Finally, once you reach the target, you need the torch equipped before you
 | ||
|    can find him in the dark. The target is always in a rocky region, so if you
 | ||
|    arrive there with climbing gear equipped, you will need to spend seven
 | ||
|    minutes switching to your torch.
 | ||
| 
 | ||
|    For example, using the same cave system as above, starting in the top left
 | ||
|    corner (0,0) and moving to the bottom right corner (the target, 10,10) as
 | ||
|    quickly as possible, one possible route is as follows, with your current
 | ||
|    position marked X:
 | ||
| 
 | ||
|  Initially: X=.|=.|.|=.|=|=. .|=|=|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..===..=|.|||. .======|||=|=.|= .===|=|===T===|| =|||...|==..|=.|
 | ||
|  =.=|=.=..=.||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Down: M=.|=.|.|=.|=|=. X|=|=|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..===..=|.|||. .======|||=|=.|= .===|=|===T===|| =|||...|==..|=.|
 | ||
|  =.=|=.=..=.||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Right: M=.|=.|.|=.|=|=. .X=|=|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..===..=|.|||. .======|||=|=.|= .===|=|===T===|| =|||...|==..|=.|
 | ||
|  =.=|=.=..=.||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Switch from using the torch to neither tool: M=.|=.|.|=.|=|=. .X=|=|||..|.=...
 | ||
|  .==|....||=..|== =.|....|.==.|==. =|..==...=.|==.. =||.=.=||=|=..|=
 | ||
|  |.=.===|||..=..| |..==||=.|==|=== .=..===..=|.|||. .======|||=|=.|=
 | ||
|  .===|=|===T===|| =|||...|==..|=.| =.=|=.=..=.||==| ||=|=...|==.=|==
 | ||
|  |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Right 3: M=.|=.|.|=.|=|=. .|=|X|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..===..=|.|||. .======|||=|=.|= .===|=|===T===|| =|||...|==..|=.|
 | ||
|  =.=|=.=..=.||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Switch from using neither tool to the climbing gear: M=.|=.|.|=.|=|=.
 | ||
|  .|=|X|||..|.=... .==|....||=..|== =.|....|.==.|==. =|..==...=.|==..
 | ||
|  =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|=== .=..===..=|.|||.
 | ||
|  .======|||=|=.|= .===|=|===T===|| =|||...|==..|=.| =.=|=.=..=.||==|
 | ||
|  ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Down 7: M=.|=.|.|=.|=|=. .|=|=|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..X==..=|.|||. .======|||=|=.|= .===|=|===T===|| =|||...|==..|=.|
 | ||
|  =.=|=.=..=.||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Right: M=.|=.|.|=.|=|=. .|=|=|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..=X=..=|.|||. .======|||=|=.|= .===|=|===T===|| =|||...|==..|=.|
 | ||
|  =.=|=.=..=.||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Down 3: M=.|=.|.|=.|=|=. .|=|=|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..===..=|.|||. .======|||=|=.|= .===|=|===T===|| =|||.X.|==..|=.|
 | ||
|  =.=|=.=..=.||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Right: M=.|=.|.|=.|=|=. .|=|=|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..===..=|.|||. .======|||=|=.|= .===|=|===T===|| =|||..X|==..|=.|
 | ||
|  =.=|=.=..=.||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Down: M=.|=.|.|=.|=|=. .|=|=|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..===..=|.|||. .======|||=|=.|= .===|=|===T===|| =|||...|==..|=.|
 | ||
|  =.=|=.X..=.||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Right 4: M=.|=.|.|=.|=|=. .|=|=|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..===..=|.|||. .======|||=|=.|= .===|=|===T===|| =|||...|==..|=.|
 | ||
|  =.=|=.=..=X||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Up 2: M=.|=.|.|=.|=|=. .|=|=|||..|.=... .==|....||=..|== =.|....|.==.|==.
 | ||
|  =|..==...=.|==.. =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|===
 | ||
|  .=..===..=|.|||. .======|||=|=.|= .===|=|===X===|| =|||...|==..|=.|
 | ||
|  =.=|=.=..=.||==| ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|  Switch from using the climbing gear to the torch: M=.|=.|.|=.|=|=.
 | ||
|  .|=|=|||..|.=... .==|....||=..|== =.|....|.==.|==. =|..==...=.|==..
 | ||
|  =||.=.=||=|=..|= |.=.===|||..=..| |..==||=.|==|=== .=..===..=|.|||.
 | ||
|  .======|||=|=.|= .===|=|===X===|| =|||...|==..|=.| =.=|=.=..=.||==|
 | ||
|  ||=|=...|==.=|== |=.=||===.|||=== ||.|==.|.|.||=||
 | ||
| 
 | ||
|    This is tied with other routes as the fastest way to reach the target: 45
 | ||
|    minutes. In it, 21 minutes are spent switching tools (three times, seven
 | ||
|    minutes each) and the remaining 24 minutes are spent moving.
 | ||
| 
 | ||
|    What is the fewest number of minutes you can take to reach the target?
 | ||
| 
 | ||
|    Your puzzle answer was 952.
 | ||
| 
 | ||
|    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://en.wikipedia.org/wiki/Modulo_operation
 | ||
|    . https://adventofcode.com/2018
 | ||
|    . https://adventofcode.com/2018/day/22/input
 |