104 lines
4.1 KiB
Plaintext
104 lines
4.1 KiB
Plaintext
Advent of Code
|
||
|
||
--- Day 17: Spinlock ---
|
||
|
||
Suddenly, whirling in the distance, you notice what looks like a massive,
|
||
pixelated hurricane: a deadly spinlock. This spinlock isn't just consuming
|
||
computing power, but memory, too; vast, digital mountains are being ripped
|
||
from the ground and consumed by the vortex.
|
||
|
||
If you don't move quickly, fixing that printer will be the least of your
|
||
problems.
|
||
|
||
This spinlock's algorithm is simple but efficient, quickly consuming
|
||
everything in its path. It starts with a circular buffer containing only the
|
||
value 0, which it marks as the current position. It then steps forward
|
||
through the circular buffer some number of steps (your puzzle input) before
|
||
inserting the first new value, 1, after the value it stopped on. The inserted
|
||
value becomes the current position. Then, it steps forward from there the
|
||
same number of steps, and wherever it stops, inserts after it the second new
|
||
value, 2, and uses that as the new current position again.
|
||
|
||
It repeats this process of stepping forward, inserting a new value, and using
|
||
the location of the inserted value as the new current position a total of
|
||
2017 times, inserting 2017 as its final operation, and ending with a total of
|
||
2018 values (including 0) in the circular buffer.
|
||
|
||
For example, if the spinlock were to step 3 times per insert, the circular
|
||
buffer would begin to evolve like this (using parentheses to mark the current
|
||
position after each iteration of the algorithm):
|
||
|
||
* (0), the initial state before any insertions.
|
||
* 0 (1): the spinlock steps forward three times (0, 0, 0), and then inserts
|
||
the first value, 1, after it. 1 becomes the current position.
|
||
* 0 (2) 1: the spinlock steps forward three times (0, 1, 0), and then
|
||
inserts the second value, 2, after it. 2 becomes the current position.
|
||
* 0 2 (3) 1: the spinlock steps forward three times (1, 0, 2), and then
|
||
inserts the third value, 3, after it. 3 becomes the current position.
|
||
|
||
And so on:
|
||
|
||
* 0 2 (4) 3 1
|
||
* 0 (5) 2 4 3 1
|
||
* 0 5 2 4 3 (6) 1
|
||
* 0 5 (7) 2 4 3 6 1
|
||
* 0 5 7 2 4 3 (8) 6 1
|
||
* 0 (9) 5 7 2 4 3 8 6 1
|
||
|
||
Eventually, after 2017 insertions, the section of the circular buffer near
|
||
the last insertion looks like this:
|
||
|
||
1512 1134 151 (2017) 638 1513 851
|
||
|
||
Perhaps, if you can identify the value that will ultimately be after the last
|
||
value written (2017), you can short-circuit the spinlock. In this example,
|
||
that would be 638.
|
||
|
||
What is the value after 2017 in your completed circular buffer?
|
||
|
||
Your puzzle answer was 1642.
|
||
|
||
--- Part Two ---
|
||
|
||
The spinlock does not short-circuit. Instead, it gets more angry. At least,
|
||
you assume that's what happened; it's spinning significantly faster than it
|
||
was a moment ago.
|
||
|
||
You have good news and bad news.
|
||
|
||
The good news is that you have improved calculations for how to stop the
|
||
spinlock. They indicate that you actually need to identify the value after 0
|
||
in the current state of the circular buffer.
|
||
|
||
The bad news is that while you were determining this, the spinlock has just
|
||
finished inserting its fifty millionth value (50000000).
|
||
|
||
What is the value after 0 the moment 50000000 is inserted?
|
||
|
||
Your puzzle answer was 301.
|
||
|
||
Both parts of this puzzle are complete! They provide two gold stars: **
|
||
|
||
At this point, you should return to your advent calendar and try another
|
||
puzzle.
|
||
|
||
Your puzzle input was 301.
|
||
|
||
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
|
||
. https://en.wikipedia.org/wiki/Spinlock
|
||
. http://adventofcode.com/2017
|