Added day 17 description
authorNeil Smith <neil.git@njae.me.uk>
Mon, 18 Dec 2017 22:40:55 +0000 (22:40 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Mon, 18 Dec 2017 22:40:55 +0000 (22:40 +0000)
problems/day17.html [new file with mode: 0644]

diff --git a/problems/day17.html b/problems/day17.html
new file mode 100644 (file)
index 0000000..ad32357
--- /dev/null
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+<meta charset="utf-8"/>
+<title>Day 17 - Advent of Code 2017</title>
+<!--[if lt IE 9]><script src="/static/html5.js"></script><![endif]-->
+<link href='//fonts.googleapis.com/css?family=Source+Code+Pro:300&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
+<link rel="stylesheet" type="text/css" href="/static/style.css?12"/>
+<link rel="stylesheet alternate" type="text/css" href="/static/highcontrast.css?0" title="High Contrast"/>
+<link rel="shortcut icon" href="/favicon.ico?2"/>
+</head><!--
+
+
+
+
+Oh, hello!  Funny seeing you here.
+
+I appreciate your enthusiasm, but you aren't going to find much down here.
+There certainly aren't clues to any of the puzzles.  The best surprises don't
+even appear in the source until you unlock them for real.
+
+Please be careful with automated requests; I'm not Google, and I can only take
+so much traffic.  Please be considerate so that everyone gets to play.
+
+If you're curious about how Advent of Code works, it's running on some custom
+Perl code. Other than a few integrations (auth, analytics, ads, social media),
+I built the whole thing myself, including the design, animations, prose, and
+all of the puzzles.
+
+The puzzles probably took the longest; the easiest ones took an hour or two
+each, but the harder ones took 4-5 hours, and a few even longer than that. A
+lot of effort went into building this thing - I hope you're enjoying playing it
+as much as I enjoyed making it for you!
+
+If you'd like to hang out, I'm @ericwastl on Twitter.
+
+- Eric Wastl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-->
+<body>
+<header><div><h1 class="title-global"><a href="/">Advent of Code</a></h1><nav><ul><li><a href="/2017/about">[About]</a></li><li><a href="/2017/support">[AoC++]</a></li><li><a href="/2017/events">[Events]</a></li><li><a href="/2017/settings">[Settings]</a></li><li><a href="/2017/auth/logout">[Log Out]</a></li></ul></nav><div class="user">Neil Smith <span class="supporter">(AoC++)</span> <span class="star-count">36*</span></div></div><div><h1 class="title-event">&nbsp;&nbsp;&nbsp;<span class="title-event-wrap">0x0000|</span><a href="/2017">2017</a><span class="title-event-wrap"></span></h1><nav><ul><li><a href="/2017">[Calendar]</a></li><li><a href="/2017/leaderboard">[Leaderboard]</a></li><li><a href="/2017/stats">[Stats]</a></li><li><a href="/2017/sponsors">[Sponsors]</a></li></ul></nav></div></header>
+
+<div id="sidebar">
+<div id="sponsor"><div class="quiet">Our <a href="/2017/sponsors">sponsors</a> help make Advent of Code possible:</div><p><a href="https://formlabs.com/" target="_blank" onclick="if(ga)ga('send','event','sponsor','click',this.href);" rel="noopener">Formlabs</a> - We make powerful, affordable 3D printers for professionals.</p></div>
+<p class="quiet">By popular demand, there are now AoC-themed objects available (until Jan. 3rd)! Get them shipped <a href="https://teespring.com/advent-of-code" target="_blank">from the US</a> or <a href="https://teespring.com/advent-of-code-eu" target="_blank">from Europe</a>.</p>
+
+</div><!--/sidebar-->
+
+<main>
+<article class="day-desc"><h2>--- Day 17: Spinlock ---</h2><p>Suddenly, whirling in the distance, you notice what looks like a massive, <span title="You know, as opposed to all those non-pixelated hurricanes you see on TV.">pixelated hurricane</span>: a deadly <a href="https://en.wikipedia.org/wiki/Spinlock">spinlock</a>. 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.</p>
+<p>If you don't move quickly, fixing that printer will be the least of your problems.</p>
+<p>This spinlock's algorithm is simple but efficient, quickly consuming everything in its path. It starts with a circular buffer containing only the value <code>0</code>, which it marks as the <em>current position</em>. It then steps forward through the circular buffer some number of steps (your puzzle input) before inserting the first new value, <code>1</code>, after the value it stopped on.  The inserted value becomes the <em>current position</em>. Then, it steps forward from there the same number of steps, and wherever it stops, inserts after it the second new value, <code>2</code>, and uses that as the new <em>current position</em> again.</p>
+<p>It repeats this process of <em>stepping forward</em>, <em>inserting a new value</em>, and <em>using the location of the inserted value as the new current position</em> a total of <code><em>2017</em></code> times, inserting <code>2017</code> as its final operation, and ending with a total of <code>2018</code> values (including <code>0</code>) in the circular buffer.</p>
+<p>For example, if the spinlock were to step <code>3</code> 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):</p>
+<ul>
+<li><code>(0)</code>, the initial state before any insertions.</li>
+<li><code>0&nbsp;(1)</code>: the spinlock steps forward three times (<code>0</code>, <code>0</code>, <code>0</code>), and then inserts the first value, <code>1</code>, after it. <code>1</code> becomes the current position.</li>
+<li><code>0&nbsp;(2)&nbsp;1</code>: the spinlock steps forward three times (<code>0</code>, <code>1</code>, <code>0</code>), and then inserts the second value, <code>2</code>, after it. <code>2</code> becomes the current position.</li>
+<li><code>0&nbsp;&nbsp;2&nbsp;(3)&nbsp;1</code>: the spinlock steps forward three times (<code>1</code>, <code>0</code>, <code>2</code>), and then inserts the third value, <code>3</code>, after it. <code>3</code> becomes the current position.</li>
+</ul>
+<p>And so on:</p>
+<ul>
+<li><code>0&nbsp;&nbsp;2&nbsp;(4)&nbsp;3&nbsp;&nbsp;1</code></li>
+<li><code>0&nbsp;(5)&nbsp;2&nbsp;&nbsp;4&nbsp;&nbsp;3&nbsp;&nbsp;1</code></li>
+<li><code>0&nbsp;&nbsp;5&nbsp;&nbsp;2&nbsp;&nbsp;4&nbsp;&nbsp;3&nbsp;(6)&nbsp;1</code></li>
+<li><code>0&nbsp;&nbsp;5&nbsp;(7)&nbsp;2&nbsp;&nbsp;4&nbsp;&nbsp;3&nbsp;&nbsp;6&nbsp;&nbsp;1</code></li>
+<li><code>0&nbsp;&nbsp;5&nbsp;&nbsp;7&nbsp;&nbsp;2&nbsp;&nbsp;4&nbsp;&nbsp;3&nbsp;(8)&nbsp;6&nbsp;&nbsp;1</code></li>
+<li><code>0&nbsp;(9)&nbsp;5&nbsp;&nbsp;7&nbsp;&nbsp;2&nbsp;&nbsp;4&nbsp;&nbsp;3&nbsp;&nbsp;8&nbsp;&nbsp;6&nbsp;&nbsp;1</code></li>
+</ul>
+<p>Eventually, after 2017 insertions, the section of the circular buffer near the last insertion looks like this:</p>
+<pre><code>1512  1134  151 (2017) 638  1513  851</code></pre>
+<p>Perhaps, if you can identify the value that will ultimately be <em>after</em> the last value written (<code>2017</code>), you can short-circuit the spinlock.  In this example, that would be <code>638</code>.</p>
+<p><em>What is the value after <code>2017</code></em> in your completed circular buffer?</p>
+</article>
+<p>Your puzzle answer was <code>1025</code>.</p><article class="day-desc"><h2>--- Part Two ---</h2><p>The spinlock does not short-circuit.  Instead, it gets <em>more</em> angry. At least, you assume that's what happened; it's spinning significantly faster than it was a moment ago.</p>
+<p>You have good news and bad news.</p>
+<p>The good news is that you have improved calculations for how to stop the spinlock. They indicate that you actually need to identify <em>the value after <code>0</code></em> in the current state of the circular buffer.</p>
+<p>The bad news is that while you were determining this, the spinlock has just finished inserting its fifty millionth value (<code>50000000</code>).</p>
+<p><em>What is the value after <code>0</code></em> the moment <code>50000000</code> is inserted?</p>
+</article>
+<p>Your puzzle answer was <code>37803463</code>.</p><p class="day-success">Both parts of this puzzle are complete! They provide two gold stars: **</p>
+<p>At this point, you should <a href="/2017">return to your advent calendar</a> and try another puzzle.</p>
+<p>Your puzzle input was <code class="puzzle-input">366</code>.</p>
+<p>You can also <span class="share">[Share<span class="share-content">on
+  <a href="https://twitter.com/intent/tweet?text=I%27ve+completed+%22Spinlock%22+%2D+Day+17+%2D+Advent+of+Code+2017&amp;url=http%3A%2F%2Fadventofcode%2Ecom%2F2017%2Fday%2F17&amp;related=ericwastl&amp;hashtags=AdventOfCode" target="_blank">Twitter</a>
+  <a href="https://plus.google.com/share?url=http%3A%2F%2Fadventofcode%2Ecom%2F2017%2Fday%2F17" target="_blank">Google+</a>
+  <a href="http://www.reddit.com/submit?url=http%3A%2F%2Fadventofcode%2Ecom%2F2017%2Fday%2F17&amp;title=I%27ve+completed+%22Spinlock%22+%2D+Day+17+%2D+Advent+of+Code+2017" target="_blank">Reddit</a
+></span>]</span> this puzzle.</p>
+</main>
+
+<!-- ga -->
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-69522494-1', 'auto');
+ga('send', 'pageview');
+</script>
+<!-- /ga -->
+</body>
+</html>
\ No newline at end of file