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
|