Mercurial > hg > aoc
diff 2017/day17/problem @ 34:049fb8e56025
Add problem statements and inputs
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Tue, 09 Jan 2018 21:51:44 -0500 |
parents | |
children |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/2017/day17/problem @@ -0,0 +1,87 @@ +--- 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 1306. + +--- 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 20430489. + +Both parts of this puzzle are complete! They provide two gold stars: **