735 lines
14 KiB
Plaintext
735 lines
14 KiB
Plaintext
Advent of Code
|
|
|
|
br0xen (AoC++) 18*
|
|
|
|
--- Day 9: Rope Bridge ---
|
|
|
|
This rope bridge creaks as you walk along it. You aren't sure how old it is, or whether it can even support your weight.
|
|
|
|
It seems to support the Elves just fine, though. The bridge spans a gorge which was carved out by the massive river far
|
|
below you.
|
|
|
|
You step carefully; as you do, the ropes stretch and twist. You decide to distract yourself by modeling rope physics;
|
|
maybe you can even figure out where not to step.
|
|
|
|
Consider a rope with a knot at each end; these knots mark the head and the tail of the rope. If the head moves far
|
|
enough away from the tail, the tail is pulled toward the head.
|
|
|
|
Due to nebulous reasoning involving Planck lengths, you should be able to model the positions of the knots on a
|
|
two-dimensional grid. Then, by following a hypothetical series of motions (your puzzle input) for the head, you can
|
|
determine how the tail will move.
|
|
|
|
Due to the aforementioned Planck lengths, the rope must be quite short; in fact, the head (H) and tail (T) must always
|
|
be touching (diagonally adjacent and even overlapping both count as touching):
|
|
|
|
....
|
|
.TH.
|
|
....
|
|
|
|
....
|
|
.H..
|
|
..T.
|
|
....
|
|
|
|
...
|
|
.H. (H covers T)
|
|
...
|
|
|
|
If the head is ever two steps directly up, down, left, or right from the tail, the tail must also move one step in that
|
|
direction so it remains close enough:
|
|
|
|
..... ..... .....
|
|
.TH.. -> .T.H. -> ..TH.
|
|
..... ..... .....
|
|
|
|
... ... ...
|
|
.T. .T. ...
|
|
.H. -> ... -> .T.
|
|
... .H. .H.
|
|
... ... ...
|
|
|
|
Otherwise, if the head and tail aren't touching and aren't in the same row or column, the tail always moves one step
|
|
diagonally to keep up:
|
|
|
|
..... ..... .....
|
|
..... ..H.. ..H..
|
|
..H.. -> ..... -> ..T..
|
|
.T... .T... .....
|
|
..... ..... .....
|
|
|
|
..... ..... .....
|
|
..... ..... .....
|
|
..H.. -> ...H. -> ..TH.
|
|
.T... .T... .....
|
|
..... ..... .....
|
|
|
|
You just need to work out where the tail goes as the head follows a series of motions. Assume the head and the tail both
|
|
start at the same position, overlapping.
|
|
|
|
For example:
|
|
|
|
R 4
|
|
U 4
|
|
L 3
|
|
D 1
|
|
R 4
|
|
D 1
|
|
L 5
|
|
R 2
|
|
|
|
This series of motions moves the head right four steps, then up four steps, then left three steps, then down one step,
|
|
and so on. After each step, you'll need to update the position of the tail if the step means the head is no longer
|
|
adjacent to the tail. Visually, these motions occur as follows (s marks the starting position as a reference point):
|
|
|
|
== Initial State ==
|
|
|
|
......
|
|
......
|
|
......
|
|
......
|
|
H..... (H covers T, s)
|
|
|
|
== R 4 ==
|
|
|
|
......
|
|
......
|
|
......
|
|
......
|
|
TH.... (T covers s)
|
|
|
|
......
|
|
......
|
|
......
|
|
......
|
|
sTH...
|
|
|
|
......
|
|
......
|
|
......
|
|
......
|
|
s.TH..
|
|
|
|
......
|
|
......
|
|
......
|
|
......
|
|
s..TH.
|
|
|
|
== U 4 ==
|
|
|
|
......
|
|
......
|
|
......
|
|
....H.
|
|
s..T..
|
|
|
|
......
|
|
......
|
|
....H.
|
|
....T.
|
|
s.....
|
|
|
|
......
|
|
....H.
|
|
....T.
|
|
......
|
|
s.....
|
|
|
|
....H.
|
|
....T.
|
|
......
|
|
......
|
|
s.....
|
|
|
|
== L 3 ==
|
|
|
|
...H..
|
|
....T.
|
|
......
|
|
......
|
|
s.....
|
|
|
|
..HT..
|
|
......
|
|
......
|
|
......
|
|
s.....
|
|
|
|
.HT...
|
|
......
|
|
......
|
|
......
|
|
s.....
|
|
|
|
== D 1 ==
|
|
|
|
..T...
|
|
.H....
|
|
......
|
|
......
|
|
s.....
|
|
|
|
== R 4 ==
|
|
|
|
..T...
|
|
..H...
|
|
......
|
|
......
|
|
s.....
|
|
|
|
..T...
|
|
...H..
|
|
......
|
|
......
|
|
s.....
|
|
|
|
......
|
|
...TH.
|
|
......
|
|
......
|
|
s.....
|
|
|
|
......
|
|
....TH
|
|
......
|
|
......
|
|
s.....
|
|
|
|
== D 1 ==
|
|
|
|
......
|
|
....T.
|
|
.....H
|
|
......
|
|
s.....
|
|
|
|
== L 5 ==
|
|
|
|
......
|
|
....T.
|
|
....H.
|
|
......
|
|
s.....
|
|
|
|
......
|
|
....T.
|
|
...H..
|
|
......
|
|
s.....
|
|
|
|
......
|
|
......
|
|
..HT..
|
|
......
|
|
s.....
|
|
|
|
......
|
|
......
|
|
.HT...
|
|
......
|
|
s.....
|
|
|
|
......
|
|
......
|
|
HT....
|
|
......
|
|
s.....
|
|
|
|
== R 2 ==
|
|
|
|
......
|
|
......
|
|
.H.... (H covers T)
|
|
......
|
|
s.....
|
|
|
|
......
|
|
......
|
|
.TH...
|
|
......
|
|
s.....
|
|
|
|
After simulating the rope, you can count up all of the positions the tail visited at least once. In this diagram, s
|
|
again marks the starting position (which the tail also visited) and # marks other positions the tail visited:
|
|
|
|
..##..
|
|
...##.
|
|
.####.
|
|
....#.
|
|
s###..
|
|
|
|
So, there are 13 positions the tail visited at least once.
|
|
|
|
Simulate your complete hypothetical series of motions. How many positions does the tail of the rope visit at least once?
|
|
|
|
Your puzzle answer was 6090.
|
|
|
|
--- Part Two ---
|
|
|
|
A rope snaps! Suddenly, the river is getting a lot closer than you remember. The bridge is still there, but some of the
|
|
ropes that broke are now whipping toward you as you fall through the air!
|
|
|
|
The ropes are moving too quickly to grab; you only have a few seconds to choose how to arch your body to avoid being
|
|
hit. Fortunately, your simulation can be extended to support longer ropes.
|
|
|
|
Rather than two knots, you now must simulate a rope consisting of ten knots. One knot is still the head of the rope and
|
|
moves according to the series of motions. Each knot further down the rope follows the knot in front of it using the same
|
|
rules as before.
|
|
|
|
Using the same series of motions as the above example, but with the knots marked H, 1, 2, ..., 9, the motions now occur
|
|
as follows:
|
|
|
|
== Initial State ==
|
|
|
|
......
|
|
......
|
|
......
|
|
......
|
|
H..... (H covers 1, 2, 3, 4, 5, 6, 7, 8, 9, s)
|
|
|
|
== R 4 ==
|
|
|
|
......
|
|
......
|
|
......
|
|
......
|
|
1H.... (1 covers 2, 3, 4, 5, 6, 7, 8, 9, s)
|
|
|
|
......
|
|
......
|
|
......
|
|
......
|
|
21H... (2 covers 3, 4, 5, 6, 7, 8, 9, s)
|
|
|
|
......
|
|
......
|
|
......
|
|
......
|
|
321H.. (3 covers 4, 5, 6, 7, 8, 9, s)
|
|
|
|
......
|
|
......
|
|
......
|
|
......
|
|
4321H. (4 covers 5, 6, 7, 8, 9, s)
|
|
|
|
== U 4 ==
|
|
|
|
......
|
|
......
|
|
......
|
|
....H.
|
|
4321.. (4 covers 5, 6, 7, 8, 9, s)
|
|
|
|
......
|
|
......
|
|
....H.
|
|
.4321.
|
|
5..... (5 covers 6, 7, 8, 9, s)
|
|
|
|
......
|
|
....H.
|
|
....1.
|
|
.432..
|
|
5..... (5 covers 6, 7, 8, 9, s)
|
|
|
|
....H.
|
|
....1.
|
|
..432.
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
== L 3 ==
|
|
|
|
...H..
|
|
....1.
|
|
..432.
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
..H1..
|
|
...2..
|
|
..43..
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
.H1...
|
|
...2..
|
|
..43..
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
== D 1 ==
|
|
|
|
..1...
|
|
.H.2..
|
|
..43..
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
== R 4 ==
|
|
|
|
..1...
|
|
..H2..
|
|
..43..
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
..1...
|
|
...H.. (H covers 2)
|
|
..43..
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
......
|
|
...1H. (1 covers 2)
|
|
..43..
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
......
|
|
...21H
|
|
..43..
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
== D 1 ==
|
|
|
|
......
|
|
...21.
|
|
..43.H
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
== L 5 ==
|
|
|
|
......
|
|
...21.
|
|
..43H.
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
......
|
|
...21.
|
|
..4H.. (H covers 3)
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
......
|
|
...2..
|
|
..H1.. (H covers 4; 1 covers 3)
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
......
|
|
...2..
|
|
.H13.. (1 covers 4)
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
......
|
|
......
|
|
H123.. (2 covers 4)
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
== R 2 ==
|
|
|
|
......
|
|
......
|
|
.H23.. (H covers 1; 2 covers 4)
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
......
|
|
......
|
|
.1H3.. (H covers 2, 4)
|
|
.5....
|
|
6..... (6 covers 7, 8, 9, s)
|
|
|
|
Now, you need to keep track of the positions the new tail, 9, visits. In this example, the tail never moves, and so it
|
|
only visits 1 position. However, be careful: more types of motion are possible than before, so you might want to
|
|
visually compare your simulated rope to the one above.
|
|
|
|
Here's a larger example:
|
|
|
|
R 5
|
|
U 8
|
|
L 8
|
|
D 3
|
|
R 17
|
|
D 10
|
|
L 25
|
|
U 20
|
|
|
|
These motions occur as follows (individual steps are not shown):
|
|
|
|
== Initial State ==
|
|
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
...........H.............. (H covers 1, 2, 3, 4, 5, 6, 7, 8, 9, s)
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
|
|
== R 5 ==
|
|
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
...........54321H......... (5 covers 6, 7, 8, 9, s)
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
|
|
== U 8 ==
|
|
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
................H.........
|
|
................1.........
|
|
................2.........
|
|
................3.........
|
|
...............54.........
|
|
..............6...........
|
|
.............7............
|
|
............8.............
|
|
...........9.............. (9 covers s)
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
|
|
== L 8 ==
|
|
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
........H1234.............
|
|
............5.............
|
|
............6.............
|
|
............7.............
|
|
............8.............
|
|
............9.............
|
|
..........................
|
|
..........................
|
|
...........s..............
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
|
|
== D 3 ==
|
|
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
.........2345.............
|
|
........1...6.............
|
|
........H...7.............
|
|
............8.............
|
|
............9.............
|
|
..........................
|
|
..........................
|
|
...........s..............
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
|
|
== R 17 ==
|
|
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
................987654321H
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
...........s..............
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
|
|
== D 10 ==
|
|
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
...........s.........98765
|
|
.........................4
|
|
.........................3
|
|
.........................2
|
|
.........................1
|
|
.........................H
|
|
|
|
== L 25 ==
|
|
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
...........s..............
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
H123456789................
|
|
|
|
== U 20 ==
|
|
|
|
H.........................
|
|
1.........................
|
|
2.........................
|
|
3.........................
|
|
4.........................
|
|
5.........................
|
|
6.........................
|
|
7.........................
|
|
8.........................
|
|
9.........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
...........s..............
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
|
|
|
|
Now, the tail (9) visits 36 positions (including s) at least once:
|
|
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
..........................
|
|
#.........................
|
|
#.............###.........
|
|
#............#...#........
|
|
.#..........#.....#.......
|
|
..#..........#.....#......
|
|
...#........#.......#.....
|
|
....#......s.........#....
|
|
.....#..............#.....
|
|
......#............#......
|
|
.......#..........#.......
|
|
........#........#........
|
|
.........########.........
|
|
|
|
Simulate your complete series of motions on a larger rope with ten knots. How many positions does the tail of the rope
|
|
visit at least once?
|
|
|
|
Your puzzle answer was 2566.
|
|
|
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
|
|
|
References
|
|
|
|
Visible links
|
|
. https://adventofcode.com/
|
|
. https://adventofcode.com/2022/about
|
|
. https://adventofcode.com/2022/events
|
|
. https://adventofcode.com/2022/settings
|
|
. https://adventofcode.com/2022/auth/logout
|
|
. Advent of Code Supporter
|
|
https://adventofcode.com/2022/support
|
|
. https://adventofcode.com/2022
|
|
. https://adventofcode.com/2022
|
|
. https://adventofcode.com/2022/support
|
|
. https://adventofcode.com/2022/sponsors
|
|
. https://adventofcode.com/2022/leaderboard
|
|
. https://adventofcode.com/2022/stats
|
|
. https://adventofcode.com/2022/sponsors
|
|
. https://en.wikipedia.org/wiki/Planck_units#Planck_length
|
|
. https://adventofcode.com/2022
|
|
. https://adventofcode.com/2022/day/9/input
|