2017 Day 13 Complete!
This commit is contained in:
parent
2554b0b3d9
commit
3de38212ca
331
2017/day13/problem
Normal file
331
2017/day13/problem
Normal file
@ -0,0 +1,331 @@
|
|||||||
|
Advent of Code
|
||||||
|
|
||||||
|
--- Day 13: Packet Scanners ---
|
||||||
|
|
||||||
|
You need to cross a vast firewall. The firewall consists of several layers, each with a security
|
||||||
|
scanner that moves back and forth across the layer. To succeed, you must not be detected by a
|
||||||
|
scanner.
|
||||||
|
|
||||||
|
By studying the firewall briefly, you are able to record (in your puzzle input) the depth of each
|
||||||
|
layer and the range of the scanning area for the scanner within it, written as depth: range. Each
|
||||||
|
layer has a thickness of exactly 1. A layer at depth 0 begins immediately inside the firewall; a
|
||||||
|
layer at depth 1 would start immediately after that.
|
||||||
|
|
||||||
|
For example, suppose you've recorded the following:
|
||||||
|
|
||||||
|
0: 3
|
||||||
|
1: 2
|
||||||
|
4: 4
|
||||||
|
6: 4
|
||||||
|
|
||||||
|
This means that there is a layer immediately inside the firewall (with range 3), a second layer
|
||||||
|
immediately after that (with range 2), a third layer which begins at depth 4 (with range 4), and a
|
||||||
|
fourth layer which begins at depth 6 (also with range 4). Visually, it might look like this:
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] ... ... [ ] ... [ ]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
Within each layer, a security scanner moves back and forth within its range. Each security scanner
|
||||||
|
starts at the top and moves down until it reaches the bottom, then moves up until it reaches the
|
||||||
|
top, and repeats. A security scanner takes one picosecond to move one step. Drawing scanners as S,
|
||||||
|
the first few picoseconds look like this:
|
||||||
|
|
||||||
|
Picosecond 0:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[S] [S] ... ... [S] ... [S]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
Picosecond 1:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] ... ... [ ] ... [ ]
|
||||||
|
[S] [S] [S] [S]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
Picosecond 2:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [S] ... ... [ ] ... [ ]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[S] [S] [S]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
Picosecond 3:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] ... ... [ ] ... [ ]
|
||||||
|
[S] [S] [ ] [ ]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[S] [S]
|
||||||
|
|
||||||
|
Your plan is to hitch a ride on a packet about to move through the firewall. The packet will travel
|
||||||
|
along the top of each layer, and it moves at one layer per picosecond. Each picosecond, the packet
|
||||||
|
moves one layer forward (its first move takes it into layer 0), and then the scanners move one step.
|
||||||
|
If there is a scanner at the top of the layer as your packet enters it, you are caught. (If a
|
||||||
|
scanner moves into the top of its layer while you are there, you are not caught: it doesn't have
|
||||||
|
time to notice you before you leave.) If you were to do this in the configuration above, marking
|
||||||
|
your current position with parentheses, your passage through the firewall would look like this:
|
||||||
|
|
||||||
|
Initial state:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[S] [S] ... ... [S] ... [S]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
Picosecond 0:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
(S) [S] ... ... [S] ... [S]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
( ) [ ] ... ... [ ] ... [ ]
|
||||||
|
[S] [S] [S] [S]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 1:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] ( ) ... ... [ ] ... [ ]
|
||||||
|
[S] [S] [S] [S]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] (S) ... ... [ ] ... [ ]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[S] [S] [S]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 2:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [S] (.) ... [ ] ... [ ]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[S] [S] [S]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] (.) ... [ ] ... [ ]
|
||||||
|
[S] [S] [ ] [ ]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[S] [S]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 3:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] ... (.) [ ] ... [ ]
|
||||||
|
[S] [S] [ ] [ ]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[S] [S]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[S] [S] ... (.) [ ] ... [ ]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[ ] [S] [S]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 4:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[S] [S] ... ... ( ) ... [ ]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[ ] [S] [S]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] ... ... ( ) ... [ ]
|
||||||
|
[S] [S] [S] [S]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 5:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] ... ... [ ] (.) [ ]
|
||||||
|
[S] [S] [S] [S]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [S] ... ... [S] (.) [S]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[S] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 6:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [S] ... ... [S] ... (S)
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[S] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] ... ... [ ] ... ( )
|
||||||
|
[S] [S] [S] [S]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
In this situation, you are caught in layers 0 and 6, because your packet entered the layer when its
|
||||||
|
scanner was at the top when you entered it. You are not caught in layer 1, since the scanner moved
|
||||||
|
into the top of the layer once you were already there.
|
||||||
|
|
||||||
|
The severity of getting caught on a layer is equal to its depth multiplied by its range. (Ignore
|
||||||
|
layers in which you do not get caught.) The severity of the whole trip is the sum of these values.
|
||||||
|
In the example above, the trip severity is 0*3 + 6*4 = 24.
|
||||||
|
|
||||||
|
Given the details of the firewall you've recorded, if you leave immediately, what is the severity of
|
||||||
|
your whole trip?
|
||||||
|
|
||||||
|
Your puzzle answer was _______.
|
||||||
|
|
||||||
|
The first half of this puzzle is complete! It provides one gold star: *
|
||||||
|
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
Now, you need to pass through the firewall without being caught - easier said than done.
|
||||||
|
|
||||||
|
You can't control the speed of the packet, but you can delay it any number of picoseconds. For each
|
||||||
|
picosecond you delay the packet before beginning your trip, all security scanners move one step.
|
||||||
|
You're not in the firewall during this time; you don't enter layer 0 until you stop delaying the
|
||||||
|
packet.
|
||||||
|
|
||||||
|
In the example above, if you delay 10 picoseconds (picoseconds 0 - 9), you won't get caught:
|
||||||
|
|
||||||
|
State after delaying:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [S] ... ... [ ] ... [ ]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[S] [S] [S]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
Picosecond 10:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
( ) [S] ... ... [ ] ... [ ]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[S] [S] [S]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
( ) [ ] ... ... [ ] ... [ ]
|
||||||
|
[S] [S] [S] [S]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 11:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] ( ) ... ... [ ] ... [ ]
|
||||||
|
[S] [S] [S] [S]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[S] (S) ... ... [S] ... [S]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 12:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[S] [S] (.) ... [S] ... [S]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] (.) ... [ ] ... [ ]
|
||||||
|
[S] [S] [S] [S]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 13:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] ... (.) [ ] ... [ ]
|
||||||
|
[S] [S] [S] [S]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [S] ... (.) [ ] ... [ ]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[S] [S] [S]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 14:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [S] ... ... ( ) ... [ ]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[S] [S] [S]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] ... ... ( ) ... [ ]
|
||||||
|
[S] [S] [ ] [ ]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[S] [S]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 15:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] ... ... [ ] (.) [ ]
|
||||||
|
[S] [S] [ ] [ ]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[S] [S]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[S] [S] ... ... [ ] (.) [ ]
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[ ] [S] [S]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
|
||||||
|
Picosecond 16:
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[S] [S] ... ... [ ] ... ( )
|
||||||
|
[ ] [ ] [ ] [ ]
|
||||||
|
[ ] [S] [S]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
[ ] [ ] ... ... [ ] ... ( )
|
||||||
|
[S] [S] [S] [S]
|
||||||
|
[ ] [ ] [ ]
|
||||||
|
[ ] [ ]
|
||||||
|
|
||||||
|
Because all smaller delays would get you caught, the fewest number of picoseconds you would need to
|
||||||
|
delay to get through safely is 10.
|
||||||
|
|
||||||
|
What is the fewest number of picoseconds that you need to delay the packet to pass through the
|
||||||
|
firewall without being caught?
|
||||||
|
|
||||||
|
Although it hasn't changed, you can still get your puzzle input.
|
||||||
|
|
||||||
|
Answer: _____________________ [ [Submit] ]
|
||||||
|
|
||||||
|
References
|
||||||
|
|
||||||
|
Visible links
|
||||||
|
. http://adventofcode.com/
|
||||||
|
. http://adventofcode.com/2017/about
|
||||||
|
. http://adventofcode.com/2017/support
|
||||||
|
. http://adventofcode.com/2017/events
|
||||||
|
. http://adventofcode.com/2017/settings
|
||||||
|
. http://adventofcode.com/2017/auth/logout
|
||||||
|
. http://adventofcode.com/2017
|
||||||
|
. http://adventofcode.com/2017
|
||||||
|
. http://adventofcode.com/2017/leaderboard
|
||||||
|
. http://adventofcode.com/2017/stats
|
||||||
|
. http://adventofcode.com/2017/sponsors
|
||||||
|
. http://adventofcode.com/2017/sponsors
|
||||||
|
. http://adventofcode.com/2017/day/13/input
|
Loading…
Reference in New Issue
Block a user