Add 2019 Problems
This commit is contained in:
173
2019/day15/problem
Normal file
173
2019/day15/problem
Normal file
@@ -0,0 +1,173 @@
|
||||
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
|
Reference in New Issue
Block a user