216 lines
8.9 KiB
Plaintext
216 lines
8.9 KiB
Plaintext
|
Advent of Code
|
|||
|
|
|||
|
--- Day 21: Keypad Conundrum ---
|
|||
|
|
|||
|
As you teleport onto Santa's [16]Reindeer-class starship, The Historians
|
|||
|
begin to panic: someone from their search party is missing. A quick
|
|||
|
life-form scan by the ship's computer reveals that when the missing
|
|||
|
Historian teleported, he arrived in another part of the ship.
|
|||
|
|
|||
|
The door to that area is locked, but the computer can't open it; it can
|
|||
|
only be opened by physically typing the door codes (your puzzle input) on
|
|||
|
the numeric keypad on the door.
|
|||
|
|
|||
|
The numeric keypad has four rows of buttons: 789, 456, 123, and finally an
|
|||
|
empty gap followed by 0A. Visually, they are arranged like this:
|
|||
|
|
|||
|
+---+---+---+
|
|||
|
| 7 | 8 | 9 |
|
|||
|
+---+---+---+
|
|||
|
| 4 | 5 | 6 |
|
|||
|
+---+---+---+
|
|||
|
| 1 | 2 | 3 |
|
|||
|
+---+---+---+
|
|||
|
| 0 | A |
|
|||
|
+---+---+
|
|||
|
|
|||
|
Unfortunately, the area outside the door is currently depressurized and
|
|||
|
nobody can go near the door. A robot needs to be sent instead.
|
|||
|
|
|||
|
The robot has no problem navigating the ship and finding the numeric
|
|||
|
keypad, but it's not designed for button pushing: it can't be told to push
|
|||
|
a specific button directly. Instead, it has a robotic arm that can be
|
|||
|
controlled remotely via a directional keypad.
|
|||
|
|
|||
|
The directional keypad has two rows of buttons: a gap / ^ (up) / A
|
|||
|
(activate) on the first row and < (left) / v (down) / > (right) on the
|
|||
|
second row. Visually, they are arranged like this:
|
|||
|
|
|||
|
+---+---+
|
|||
|
| ^ | A |
|
|||
|
+---+---+---+
|
|||
|
| < | v | > |
|
|||
|
+---+---+---+
|
|||
|
|
|||
|
When the robot arrives at the numeric keypad, its robotic arm is pointed
|
|||
|
at the A button in the bottom right corner. After that, this directional
|
|||
|
keypad remote control must be used to maneuver the robotic arm: the up /
|
|||
|
down / left / right buttons cause it to move its arm one button in that
|
|||
|
direction, and the A button causes the robot to briefly move forward,
|
|||
|
pressing the button being aimed at by the robotic arm.
|
|||
|
|
|||
|
For example, to make the robot type 029A on the numeric keypad, one
|
|||
|
sequence of inputs on the directional keypad you could use is:
|
|||
|
|
|||
|
• < to move the arm from A (its initial position) to 0.
|
|||
|
• A to push the 0 button.
|
|||
|
• ^A to move the arm to the 2 button and push it.
|
|||
|
• >^^A to move the arm to the 9 button and push it.
|
|||
|
• vvvA to move the arm to the A button and push it.
|
|||
|
|
|||
|
In total, there are three shortest possible sequences of button presses on
|
|||
|
this directional keypad that would cause the robot to type 029A:
|
|||
|
<A^A>^^AvvvA, <A^A^>^AvvvA, and <A^A^^>AvvvA.
|
|||
|
|
|||
|
Unfortunately, the area containing this directional keypad remote control
|
|||
|
is currently experiencing high levels of radiation and nobody can go near
|
|||
|
it. A robot needs to be sent instead.
|
|||
|
|
|||
|
When the robot arrives at the directional keypad, its robot arm is pointed
|
|||
|
at the A button in the upper right corner. After that, a second, different
|
|||
|
directional keypad remote control is used to control this robot (in the
|
|||
|
same way as the first robot, except that this one is typing on a
|
|||
|
directional keypad instead of a numeric keypad).
|
|||
|
|
|||
|
There are multiple shortest possible sequences of directional keypad
|
|||
|
button presses that would cause this robot to tell the first robot to type
|
|||
|
029A on the door. One such sequence is v<<A>>^A<A>AvA<^AA>A<vAAA>^A.
|
|||
|
|
|||
|
Unfortunately, the area containing this second directional keypad remote
|
|||
|
control is currently -40 degrees! Another robot will need to be sent to
|
|||
|
type on that directional keypad, too.
|
|||
|
|
|||
|
There are many shortest possible sequences of directional keypad button
|
|||
|
presses that would cause this robot to tell the second robot to tell the
|
|||
|
first robot to eventually type 029A on the door. One such sequence is
|
|||
|
<vA<AA>>^AvAA<^A>A<v<A>>^AvA^A<vA>^A<v<A>^A>AAvA^A<v<A>A>^AAAvA<^A>A.
|
|||
|
|
|||
|
Unfortunately, the area containing this third directional keypad remote
|
|||
|
control is currently full of Historians, so no robots can find a clear
|
|||
|
path there. Instead, you will have to type this sequence yourself.
|
|||
|
|
|||
|
Were you to choose this sequence of button presses, here are all of the
|
|||
|
buttons that would be pressed on your directional keypad, the two robots'
|
|||
|
directional keypads, and the numeric keypad:
|
|||
|
|
|||
|
<vA<AA>>^AvAA<^A>A<v<A>>^AvA^A<vA>^A<v<A>^A>AAvA^A<v<A>A>^AAAvA<^A>A
|
|||
|
v<<A>>^A<A>AvA<^AA>A<vAAA>^A
|
|||
|
<A^A>^^AvvvA
|
|||
|
029A
|
|||
|
|
|||
|
In summary, there are the following keypads:
|
|||
|
|
|||
|
• One directional keypad that you are using.
|
|||
|
• Two directional keypads that robots are using.
|
|||
|
• One numeric keypad (on a door) that a robot is using.
|
|||
|
|
|||
|
It is important to remember that these robots are not designed for button
|
|||
|
pushing. In particular, if a robot arm is ever aimed at a gap where no
|
|||
|
button is present on the keypad, even for an instant, the robot will panic
|
|||
|
unrecoverably. So, don't do that. All robots will initially aim at the
|
|||
|
keypad's A key, wherever it is.
|
|||
|
|
|||
|
To unlock the door, five codes will need to be typed on its numeric
|
|||
|
keypad. For example:
|
|||
|
|
|||
|
029A
|
|||
|
980A
|
|||
|
179A
|
|||
|
456A
|
|||
|
379A
|
|||
|
|
|||
|
For each of these, here is a shortest sequence of button presses you could
|
|||
|
type to cause the desired code to be typed on the numeric keypad:
|
|||
|
|
|||
|
029A: <vA<AA>>^AvAA<^A>A<v<A>>^AvA^A<vA>^A<v<A>^A>AAvA^A<v<A>A>^AAAvA<^A>A
|
|||
|
980A: <v<A>>^AAAvA^A<vA<AA>>^AvAA<^A>A<v<A>A>^AAAvA<^A>A<vA>^A<A>A
|
|||
|
179A: <v<A>>^A<vA<A>>^AAvAA<^A>A<v<A>>^AAvA^A<vA>^AA<A>A<v<A>A>^AAAvA<^A>A
|
|||
|
456A: <v<A>>^AA<vA<A>>^AAvAA<^A>A<vA>^A<A>A<vA>^A<A>A<v<A>A>^AAvA<^A>A
|
|||
|
379A: <v<A>>^AvA^A<vA<AA>>^AAvA<^A>AAvA^A<vA>^AA<A>A<v<A>A>^AAAvA<^A>A
|
|||
|
|
|||
|
The Historians are getting nervous; the ship computer doesn't remember
|
|||
|
whether the missing Historian is trapped in the area containing a giant
|
|||
|
electromagnet or molten lava. You'll need to make sure that for each of
|
|||
|
the five codes, you find the shortest sequence of button presses
|
|||
|
necessary.
|
|||
|
|
|||
|
The complexity of a single code (like 029A) is equal to the result of
|
|||
|
multiplying these two values:
|
|||
|
|
|||
|
• The length of the shortest sequence of button presses you need to type
|
|||
|
on your directional keypad in order to cause the code to be typed on
|
|||
|
the numeric keypad; for 029A, this would be 68.
|
|||
|
• The numeric part of the code (ignoring leading zeroes); for 029A, this
|
|||
|
would be 29.
|
|||
|
|
|||
|
In the above example, complexity of the five codes can be found by
|
|||
|
calculating 68 * 29, 60 * 980, 68 * 179, 64 * 456, and 64 * 379. Adding
|
|||
|
these together produces 126384.
|
|||
|
|
|||
|
Find the fewest number of button presses you'll need to perform in order
|
|||
|
to cause the robot in front of the door to type each code. What is the sum
|
|||
|
of the complexities of the five codes on your list?
|
|||
|
|
|||
|
Your puzzle answer was 248684.
|
|||
|
|
|||
|
--- Part Two ---
|
|||
|
|
|||
|
Just as the missing Historian is released, The Historians realize that a
|
|||
|
second member of their search party has also been missing this entire
|
|||
|
time!
|
|||
|
|
|||
|
A quick life-form scan reveals the Historian is also trapped in a locked
|
|||
|
area of the ship. Due to a variety of hazards, robots are once again
|
|||
|
dispatched, forming another chain of remote control keypads managing
|
|||
|
robotic-arm-wielding robots.
|
|||
|
|
|||
|
This time, many more robots are involved. In summary, there are the
|
|||
|
following keypads:
|
|||
|
|
|||
|
• One directional keypad that you are using.
|
|||
|
• 25 directional keypads that robots are using.
|
|||
|
• One numeric keypad (on a door) that a robot is using.
|
|||
|
|
|||
|
The keypads form a chain, just like before: your directional keypad
|
|||
|
controls a robot which is typing on a directional keypad which controls a
|
|||
|
robot which is typing on a directional keypad... and so on, ending with
|
|||
|
the robot which is typing on the numeric keypad.
|
|||
|
|
|||
|
The door codes are the same this time around; only the number of robots
|
|||
|
and directional keypads has changed.
|
|||
|
|
|||
|
Find the fewest number of button presses you'll need to perform in order
|
|||
|
to cause the robot in front of the door to type each code. What is the sum
|
|||
|
of the complexities of the five codes on your list?
|
|||
|
|
|||
|
Your puzzle answer was 307055584161760.
|
|||
|
|
|||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
|||
|
|
|||
|
At this point, you should [17]return to your Advent calendar and try
|
|||
|
another puzzle.
|
|||
|
|
|||
|
If you still want to see it, you can [18]get your puzzle input.
|
|||
|
|
|||
|
References
|
|||
|
|
|||
|
Visible links
|
|||
|
1. https://adventofcode.com/
|
|||
|
2. https://adventofcode.com/2024/about
|
|||
|
3. https://adventofcode.com/2024/events
|
|||
|
4. https://cottonbureau.com/people/advent-of-code
|
|||
|
5. https://adventofcode.com/2024/settings
|
|||
|
6. https://adventofcode.com/2024/auth/logout
|
|||
|
7. Advent of Code Supporter
|
|||
|
https://adventofcode.com/2024/support
|
|||
|
8. https://adventofcode.com/2024
|
|||
|
9. https://adventofcode.com/2024
|
|||
|
10. https://adventofcode.com/2024/support
|
|||
|
11. https://adventofcode.com/2024/sponsors
|
|||
|
12. https://adventofcode.com/2024/leaderboard
|
|||
|
13. https://adventofcode.com/2024/stats
|
|||
|
14. https://adventofcode.com/2024/sponsors
|
|||
|
16. https://adventofcode.com/2019/day/25
|
|||
|
17. https://adventofcode.com/2024
|
|||
|
18. https://adventofcode.com/2024/day/21/input
|