174 lines
5.3 KiB
Plaintext
174 lines
5.3 KiB
Plaintext
Advent of Code
|
||
|
||
--- Day 15: Oxygen System ---
|
||
|
||
Out here in deep space, many things can go wrong. Fortunately, many of those things have indicator lights. Unfortunately, one
|
||
of those lights is lit: the oxygen system for part of the ship has failed!
|
||
|
||
According to the readouts, the oxygen system must have failed days ago after a rupture in oxygen tank two; that section of
|
||
the ship was automatically sealed once oxygen levels went dangerously low. A single remotely-operated repair droid is your
|
||
only option for fixing the oxygen system.
|
||
|
||
The Elves' care package included an Intcode program (your puzzle input) that you can use to remotely control the repair
|
||
droid. By running that program, you can direct the repair droid to the oxygen system and fix the problem.
|
||
|
||
The remote control program executes the following steps in a loop forever:
|
||
|
||
• Accept a movement command via an input instruction.
|
||
• Send the movement command to the repair droid.
|
||
• Wait for the repair droid to finish the movement operation.
|
||
• Report on the status of the repair droid via an output instruction.
|
||
|
||
Only four movement commands are understood: north (1), south (2), west (3), and east (4). Any other command is invalid. The
|
||
movements differ in direction, but not in distance: in a long enough east-west hallway, a series of commands like
|
||
4,4,4,4,3,3,3,3 would leave the repair droid back where it started.
|
||
|
||
The repair droid can reply with any of the following status codes:
|
||
|
||
• 0: The repair droid hit a wall. Its position has not changed.
|
||
• 1: The repair droid has moved one step in the requested direction.
|
||
• 2: The repair droid has moved one step in the requested direction; its new position is the location of the oxygen system.
|
||
|
||
You don't know anything about the area around the repair droid, but you can figure it out by watching the status codes.
|
||
|
||
For example, we can draw the area using D for the droid, # for walls, . for locations the droid can traverse, and empty space
|
||
for unexplored locations. Then, the initial state looks like this:
|
||
|
||
|
||
|
||
D
|
||
|
||
|
||
|
||
To make the droid go north, send it 1. If it replies with 0, you know that location is a wall and that the droid didn't move:
|
||
|
||
|
||
#
|
||
D
|
||
|
||
|
||
|
||
To move east, send 4; a reply of 1 means the movement was successful:
|
||
|
||
|
||
#
|
||
.D
|
||
|
||
|
||
|
||
Then, perhaps attempts to move north (1), south (2), and east (4) are all met with replies of 0:
|
||
|
||
|
||
##
|
||
.D#
|
||
#
|
||
|
||
|
||
Now, you know the repair droid is in a dead end. Backtrack with 3 (which you already know will get a reply of 1 because you
|
||
already know that location is open):
|
||
|
||
|
||
##
|
||
D.#
|
||
#
|
||
|
||
|
||
Then, perhaps west (3) gets a reply of 0, south (2) gets a reply of 1, south again (2) gets a reply of 0, and then west (3)
|
||
gets a reply of 2:
|
||
|
||
|
||
##
|
||
#..#
|
||
D.#
|
||
#
|
||
|
||
Now, because of the reply of 2, you know you've found the oxygen system! In this example, it was only 2 moves away from the
|
||
repair droid's starting position.
|
||
|
||
What is the fewest number of movement commands required to move the repair droid from its starting position to the location
|
||
of the oxygen system?
|
||
|
||
Your puzzle answer was 240.
|
||
|
||
--- Part Two ---
|
||
|
||
You quickly repair the oxygen system; oxygen gradually fills the area.
|
||
|
||
Oxygen starts in the location containing the repaired oxygen system. It takes one minute for oxygen to spread to all open
|
||
locations that are adjacent to a location that already contains oxygen. Diagonal locations are not adjacent.
|
||
|
||
In the example above, suppose you've used the droid to explore the area fully and have the following map (where locations
|
||
that currently contain oxygen are marked O):
|
||
|
||
##
|
||
#..##
|
||
#.#..#
|
||
#.O.#
|
||
###
|
||
|
||
Initially, the only location which contains oxygen is the location of the repaired oxygen system. However, after one minute,
|
||
the oxygen spreads to all open (.) locations that are adjacent to a location containing oxygen:
|
||
|
||
##
|
||
#..##
|
||
#.#..#
|
||
#OOO#
|
||
###
|
||
|
||
After a total of two minutes, the map looks like this:
|
||
|
||
##
|
||
#..##
|
||
#O#O.#
|
||
#OOO#
|
||
###
|
||
|
||
After a total of three minutes:
|
||
|
||
##
|
||
#O.##
|
||
#O#OO#
|
||
#OOO#
|
||
###
|
||
|
||
And finally, the whole region is full of oxygen after a total of four minutes:
|
||
|
||
##
|
||
#OO##
|
||
#O#OO#
|
||
#OOO#
|
||
###
|
||
|
||
So, in this example, all locations contain oxygen after 4 minutes.
|
||
|
||
Use the repair droid to get a complete map of the area. How many minutes will it take to fill with oxygen?
|
||
|
||
Your puzzle answer was 322.
|
||
|
||
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://adventofcode.com/2019/day/9
|
||
. https://adventofcode.com/2019
|
||
. https://adventofcode.com/2019/day/15/input
|