294 lines
8.1 KiB
Plaintext
294 lines
8.1 KiB
Plaintext
Advent of Code
|
||
|
||
--- Day 18: Many-Worlds Interpretation ---
|
||
|
||
As you approach Neptune, a planetary security system detects you and activates a giant tractor beam on Triton! You have no
|
||
choice but to land.
|
||
|
||
A scan of the local area reveals only one interesting feature: a massive underground vault. You generate a map of the tunnels
|
||
(your puzzle input). The tunnels are too narrow to move diagonally.
|
||
|
||
Only one entrance (marked @) is present among the open passages (marked .) and stone walls (#), but you also detect an
|
||
assortment of keys (shown as lowercase letters) and doors (shown as uppercase letters). Keys of a given letter open the door
|
||
of the same letter: a opens A, b opens B, and so on. You aren't sure which key you need to disable the tractor beam, so
|
||
you'll need to collect all of them.
|
||
|
||
For example, suppose you have the following map:
|
||
|
||
#########
|
||
#b.A.@.a#
|
||
#########
|
||
|
||
Starting from the entrance (@), you can only access a large door (A) and a key (a). Moving toward the door doesn't help you,
|
||
but you can move 2 steps to collect the key, unlocking A in the process:
|
||
|
||
#########
|
||
#b.....@#
|
||
#########
|
||
|
||
Then, you can move 6 steps to collect the only other key, b:
|
||
|
||
#########
|
||
#@......#
|
||
#########
|
||
|
||
So, collecting every key took a total of 8 steps.
|
||
|
||
Here is a larger example:
|
||
|
||
########################
|
||
#f.D.E.e.C.b.A.@.a.B.c.#
|
||
######################.#
|
||
#d.....................#
|
||
########################
|
||
|
||
The only reasonable move is to take key a and unlock door A:
|
||
|
||
########################
|
||
#f.D.E.e.C.b.....@.B.c.#
|
||
######################.#
|
||
#d.....................#
|
||
########################
|
||
|
||
Then, do the same with key b:
|
||
|
||
########################
|
||
#f.D.E.e.C.@.........c.#
|
||
######################.#
|
||
#d.....................#
|
||
########################
|
||
|
||
...and the same with key c:
|
||
|
||
########################
|
||
#f.D.E.e.............@.#
|
||
######################.#
|
||
#d.....................#
|
||
########################
|
||
|
||
Now, you have a choice between keys d and e. While key e is closer, collecting it now would be slower in the long run than
|
||
collecting key d first, so that's the best choice:
|
||
|
||
########################
|
||
#f...E.e...............#
|
||
######################.#
|
||
#@.....................#
|
||
########################
|
||
|
||
Finally, collect key e to unlock door E, then collect key f, taking a grand total of 86 steps.
|
||
|
||
Here are a few more examples:
|
||
|
||
• ########################
|
||
#...............b.C.D.f#
|
||
#.######################
|
||
#.....@.a.B.c.d.A.e.F.g#
|
||
########################
|
||
|
||
Shortest path is 132 steps: b, a, c, d, f, e, g
|
||
|
||
• #################
|
||
#i.G..c...e..H.p#
|
||
########.########
|
||
#j.A..b...f..D.o#
|
||
########@########
|
||
#k.E..a...g..B.n#
|
||
########.########
|
||
#l.F..d...h..C.m#
|
||
#################
|
||
|
||
Shortest paths are 136 steps;
|
||
one is: a, f, b, j, g, n, h, d, l, o, e, p, c, i, k, m
|
||
|
||
• ########################
|
||
#@..............ac.GI.b#
|
||
###d#e#f################
|
||
###A#B#C################
|
||
###g#h#i################
|
||
########################
|
||
|
||
Shortest paths are 81 steps; one is: a, c, f, i, d, g, b, e, h
|
||
|
||
How many steps is the shortest path that collects all of the keys?
|
||
|
||
Your puzzle answer was 4270.
|
||
|
||
--- Part Two ---
|
||
|
||
You arrive at the vault only to discover that there is not one vault, but four - each with its own entrance.
|
||
|
||
On your map, find the area in the middle that looks like this:
|
||
|
||
...
|
||
.@.
|
||
...
|
||
|
||
Update your map to instead use the correct data:
|
||
|
||
@#@
|
||
###
|
||
@#@
|
||
|
||
This change will split your map into four separate sections, each with its own entrance:
|
||
|
||
####### #######
|
||
#a.#Cd# #a.#Cd#
|
||
##...## ##@#@##
|
||
##.@.## --> #######
|
||
##...## ##@#@##
|
||
#cB#Ab# #cB#Ab#
|
||
####### #######
|
||
|
||
Because some of the keys are for doors in other vaults, it would take much too long to collect all of the keys by yourself.
|
||
Instead, you deploy four remote-controlled robots. Each starts at one of the entrances (@).
|
||
|
||
Your goal is still to collect all of the keys in the fewest steps, but now, each robot has its own position and can move
|
||
independently. You can only remotely control a single robot at a time. Collecting a key instantly unlocks any corresponding
|
||
doors, regardless of the vault in which the key or door is found.
|
||
|
||
For example, in the map above, the top-left robot first collects key a, unlocking door A in the bottom-right vault:
|
||
|
||
#######
|
||
#@.#Cd#
|
||
##.#@##
|
||
#######
|
||
##@#@##
|
||
#cB#.b#
|
||
#######
|
||
|
||
Then, the bottom-right robot collects key b, unlocking door B in the bottom-left vault:
|
||
|
||
#######
|
||
#@.#Cd#
|
||
##.#@##
|
||
#######
|
||
##@#.##
|
||
#c.#.@#
|
||
#######
|
||
|
||
Then, the bottom-left robot collects key c:
|
||
|
||
#######
|
||
#@.#.d#
|
||
##.#@##
|
||
#######
|
||
##.#.##
|
||
#@.#.@#
|
||
#######
|
||
|
||
Finally, the top-right robot collects key d:
|
||
|
||
#######
|
||
#@.#.@#
|
||
##.#.##
|
||
#######
|
||
##.#.##
|
||
#@.#.@#
|
||
#######
|
||
|
||
In this example, it only took 8 steps to collect all of the keys.
|
||
|
||
Sometimes, multiple robots might have keys available, or a robot might have to wait for multiple keys to be collected:
|
||
|
||
###############
|
||
#d.ABC.#.....a#
|
||
######@#@######
|
||
###############
|
||
######@#@######
|
||
#b.....#.....c#
|
||
###############
|
||
|
||
First, the top-right, bottom-left, and bottom-right robots take turns collecting keys a, b, and c, a total of 6 + 6 + 6 = 18
|
||
steps. Then, the top-left robot can access key d, spending another 6 steps; collecting all of the keys here takes a minimum
|
||
of 24 steps.
|
||
|
||
Here's a more complex example:
|
||
|
||
#############
|
||
#DcBa.#.GhKl#
|
||
#.###@#@#I###
|
||
#e#d#####j#k#
|
||
###C#@#@###J#
|
||
#fEbA.#.FgHi#
|
||
#############
|
||
|
||
• Top-left robot collects key a.
|
||
• Bottom-left robot collects key b.
|
||
• Top-left robot collects key c.
|
||
• Bottom-left robot collects key d.
|
||
• Top-left robot collects key e.
|
||
• Bottom-left robot collects key f.
|
||
• Bottom-right robot collects key g.
|
||
• Top-right robot collects key h.
|
||
• Bottom-right robot collects key i.
|
||
• Top-right robot collects key j.
|
||
• Bottom-right robot collects key k.
|
||
• Top-right robot collects key l.
|
||
|
||
In the above example, the fewest steps to collect all of the keys is 32.
|
||
|
||
Here's an example with more choices:
|
||
|
||
#############
|
||
#g#f.D#..h#l#
|
||
#F###e#E###.#
|
||
#dCba@#@BcIJ#
|
||
#############
|
||
#nK.L@#@G...#
|
||
#M###N#H###.#
|
||
#o#m..#i#jk.#
|
||
#############
|
||
|
||
One solution with the fewest steps is:
|
||
|
||
• Top-left robot collects key e.
|
||
• Top-right robot collects key h.
|
||
• Bottom-right robot collects key i.
|
||
• Top-left robot collects key a.
|
||
• Top-left robot collects key b.
|
||
• Top-right robot collects key c.
|
||
• Top-left robot collects key d.
|
||
• Top-left robot collects key f.
|
||
• Top-left robot collects key g.
|
||
• Bottom-right robot collects key k.
|
||
• Bottom-right robot collects key j.
|
||
• Top-right robot collects key l.
|
||
• Bottom-left robot collects key n.
|
||
• Bottom-left robot collects key m.
|
||
• Bottom-left robot collects key o.
|
||
|
||
This example requires at least 72 steps to collect all keys.
|
||
|
||
After updating your map and using the remote-controlled robots, what is the fewest steps necessary to collect all of the
|
||
keys?
|
||
|
||
Your puzzle answer was 1982.
|
||
|
||
Both parts of this puzzle are complete! They provide two gold stars: **
|
||
|
||
At this point, all that is left is for you to admire your Advent calendar.
|
||
|
||
If you still want to see it, you can get your puzzle input.
|
||
|
||
References
|
||
|
||
Visible links
|
||
. https://adventofcode.com/
|
||
. https://adventofcode.com/2019/about
|
||
. https://adventofcode.com/2019/events
|
||
. https://adventofcode.com/2019/settings
|
||
. https://adventofcode.com/2019/auth/logout
|
||
. Advent of Code Supporter
|
||
https://adventofcode.com/2019/support
|
||
. https://adventofcode.com/2019
|
||
. https://adventofcode.com/2019
|
||
. https://adventofcode.com/2019/support
|
||
. https://adventofcode.com/2019/sponsors
|
||
. https://adventofcode.com/2019/leaderboard
|
||
. https://adventofcode.com/2019/stats
|
||
. https://adventofcode.com/2019/sponsors
|
||
. https://en.wikipedia.org/wiki/Tractor_beam
|
||
. https://en.wikipedia.org/wiki/Triton_(moon)
|
||
. https://adventofcode.com/2019
|
||
. https://adventofcode.com/2019/day/18/input
|