Done day 21
[advent-of-code-20.git] / problems / day17.html
1 <!DOCTYPE html>
2 <html lang="en-us">
3 <head>
4 <meta charset="utf-8"/>
5 <title>Day 17 - Advent of Code 2020</title>
6 <!--[if lt IE 9]><script src="/static/html5.js"></script><![endif]-->
7 <link href='//fonts.googleapis.com/css?family=Source+Code+Pro:300&subset=latin,latin-ext' rel='stylesheet' type='text/css'/>
8 <link rel="stylesheet" type="text/css" href="/static/style.css?25"/>
9 <link rel="stylesheet alternate" type="text/css" href="/static/highcontrast.css?0" title="High Contrast"/>
10 <link rel="shortcut icon" href="/favicon.png"/>
11 </head><!--
12
13
14
15
16 Oh, hello! Funny seeing you here.
17
18 I appreciate your enthusiasm, but you aren't going to find much down here.
19 There certainly aren't clues to any of the puzzles. The best surprises don't
20 even appear in the source until you unlock them for real.
21
22 Please be careful with automated requests; I'm not a massive company, and I can
23 only take so much traffic. Please be considerate so that everyone gets to play.
24
25 If you're curious about how Advent of Code works, it's running on some custom
26 Perl code. Other than a few integrations (auth, analytics, social media), I
27 built the whole thing myself, including the design, animations, prose, and all
28 of the puzzles.
29
30 The puzzles are most of the work; preparing a new calendar and a new set of
31 puzzles each year takes all of my free time for 4-5 months. A lot of effort
32 went into building this thing - I hope you're enjoying playing it as much as I
33 enjoyed making it for you!
34
35 If you'd like to hang out, I'm @ericwastl on Twitter.
36
37 - Eric Wastl
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 -->
89 <body>
90 <header><div><h1 class="title-global"><a href="/">Advent of Code</a></h1><nav><ul><li><a href="/2020/about">[About]</a></li><li><a href="/2020/events">[Events]</a></li><li><a href="https://teespring.com/stores/advent-of-code" target="_blank">[Shop]</a></li><li><a href="/2020/settings">[Settings]</a></li><li><a href="/2020/auth/logout">[Log Out]</a></li></ul></nav><div class="user">Neil Smith <a href="/2020/support" class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a> <span class="star-count">34*</span></div></div><div><h1 class="title-event">&nbsp;&nbsp;<span class="title-event-wrap">0.0.0.0:</span><a href="/2020">2020</a><span class="title-event-wrap"></span></h1><nav><ul><li><a href="/2020">[Calendar]</a></li><li><a href="/2020/support">[AoC++]</a></li><li><a href="/2020/sponsors">[Sponsors]</a></li><li><a href="/2020/leaderboard">[Leaderboard]</a></li><li><a href="/2020/stats">[Stats]</a></li></ul></nav></div></header>
91
92 <div id="sidebar">
93 <div id="sponsor"><div class="quiet">Our <a href="/2020/sponsors">sponsors</a> help make Advent of Code possible:</div><div class="sponsor"><a href="https://careers.bolt.eu/positions?team=engineering&amp;utm_source=adventofcode&amp;utm_medium=banner&amp;utm_campaign=adventofcode_traffic" target="_blank" onclick="if(ga)ga('send','event','sponsor','sidebar',this.href);" rel="noopener">Bolt</a> - Fastest growing mobility startup in Europe: distributed systems, microservices, ML, complex algorithms for demand prediction, and much more!</div></div>
94 </div><!--/sidebar-->
95
96 <main>
97 <script>window.addEventListener('click', function(e,s,r){if(e.target.nodeName==='CODE'&&e.detail===3){s=window.getSelection();s.removeAllRanges();r=document.createRange();r.selectNodeContents(e.target);s.addRange(r);}});</script>
98 <article class="day-desc"><h2>--- Day 17: Conway Cubes ---</h2><p>As your flight slowly drifts through the sky, the Elves at the Mythical Information Bureau at the North Pole contact you. They'd like some help debugging a malfunctioning experimental energy source aboard one of their super-secret imaging satellites.</p>
99 <p>The experimental energy source is based on cutting-edge technology: a set of <span title="Rest in peace, Conway.">Conway</span> Cubes contained in a pocket dimension! When you hear it's having problems, you can't help but agree to take a look.</p>
100 <p>The pocket dimension contains an infinite 3-dimensional grid. At every integer 3-dimensional coordinate (<code>x,y,z</code>), there exists a single cube which is either <em>active</em> or <em>inactive</em>.</p>
101 <p>In the initial state of the pocket dimension, almost all cubes start <em>inactive</em>. The only exception to this is a small flat region of cubes (your puzzle input); the cubes in this region start in the specified <em>active</em> (<code>#</code>) or <em>inactive</em> (<code>.</code>) state.</p>
102 <p>The energy source then proceeds to boot up by executing six <em>cycles</em>.</p>
103 <p>Each cube only ever considers its <em>neighbors</em>: any of the 26 other cubes where any of their coordinates differ by at most <code>1</code>. For example, given the cube at <code>x=1,y=2,z=3</code>, its neighbors include the cube at <code>x=2,y=2,z=2</code>, the cube at <code>x=0,y=2,z=3</code>, and so on.</p>
104 <p>During a cycle, <em>all</em> cubes <em>simultaneously</em> change their state according to the following rules:</p>
105 <ul>
106 <li>If a cube is <em>active</em> and <em>exactly <code>2</code> or <code>3</code></em> of its neighbors are also active, the cube remains <em>active</em>. Otherwise, the cube becomes <em>inactive</em>.</li>
107 <li>If a cube is <em>inactive</em> but <em>exactly <code>3</code></em> of its neighbors are active, the cube becomes <em>active</em>. Otherwise, the cube remains <em>inactive</em>.</li>
108 </ul>
109 <p>The engineers responsible for this experimental energy source would like you to simulate the pocket dimension and determine what the configuration of cubes should be at the end of the six-cycle boot process.</p>
110 <p>For example, consider the following initial state:</p>
111 <pre><code>.#.
112 ..#
113 ###
114 </code></pre>
115 <p>Even though the pocket dimension is 3-dimensional, this initial state represents a small 2-dimensional slice of it. (In particular, this initial state defines a 3x3x1 region of the 3-dimensional space.)</p>
116 <p>Simulating a few cycles from this initial state produces the following configurations, where the result of each cycle is shown layer-by-layer at each given <code>z</code> coordinate (and the frame of view follows the active cells in each cycle):</p>
117 <pre><code>Before any cycles:
118
119 z=0
120 .#.
121 ..#
122 ###
123
124
125 After 1 cycle:
126
127 z=-1
128 #..
129 ..#
130 .#.
131
132 z=0
133 #.#
134 .##
135 .#.
136
137 z=1
138 #..
139 ..#
140 .#.
141
142
143 After 2 cycles:
144
145 z=-2
146 .....
147 .....
148 ..#..
149 .....
150 .....
151
152 z=-1
153 ..#..
154 .#..#
155 ....#
156 .#...
157 .....
158
159 z=0
160 ##...
161 ##...
162 #....
163 ....#
164 .###.
165
166 z=1
167 ..#..
168 .#..#
169 ....#
170 .#...
171 .....
172
173 z=2
174 .....
175 .....
176 ..#..
177 .....
178 .....
179
180
181 After 3 cycles:
182
183 z=-2
184 .......
185 .......
186 ..##...
187 ..###..
188 .......
189 .......
190 .......
191
192 z=-1
193 ..#....
194 ...#...
195 #......
196 .....##
197 .#...#.
198 ..#.#..
199 ...#...
200
201 z=0
202 ...#...
203 .......
204 #......
205 .......
206 .....##
207 .##.#..
208 ...#...
209
210 z=1
211 ..#....
212 ...#...
213 #......
214 .....##
215 .#...#.
216 ..#.#..
217 ...#...
218
219 z=2
220 .......
221 .......
222 ..##...
223 ..###..
224 .......
225 .......
226 .......
227 </code></pre>
228 <p>After the full six-cycle boot process completes, <em><code>112</code></em> cubes are left in the <em>active</em> state.</p>
229 <p>Starting with your given initial configuration, simulate six cycles. <em>How many cubes are left in the active state after the sixth cycle?</em></p>
230 </article>
231 <p>Your puzzle answer was <code>388</code>.</p><article class="day-desc"><h2 id="part2">--- Part Two ---</h2><p>For some reason, your simulated results don't match what the experimental energy source engineers expected. Apparently, the pocket dimension actually has <em>four spatial dimensions</em>, not three.</p>
232 <p>The pocket dimension contains an infinite 4-dimensional grid. At every integer 4-dimensional coordinate (<code>x,y,z,w</code>), there exists a single cube (really, a <em>hypercube</em>) which is still either <em>active</em> or <em>inactive</em>.</p>
233 <p>Each cube only ever considers its <em>neighbors</em>: any of the 80 other cubes where any of their coordinates differ by at most <code>1</code>. For example, given the cube at <code>x=1,y=2,z=3,w=4</code>, its neighbors include the cube at <code>x=2,y=2,z=3,w=3</code>, the cube at <code>x=0,y=2,z=3,w=4</code>, and so on.</p>
234 <p>The initial state of the pocket dimension still consists of a small flat region of cubes. Furthermore, the same rules for cycle updating still apply: during each cycle, consider the <em>number of active neighbors</em> of each cube.</p>
235 <p>For example, consider the same initial state as in the example above. Even though the pocket dimension is 4-dimensional, this initial state represents a small 2-dimensional slice of it. (In particular, this initial state defines a 3x3x1x1 region of the 4-dimensional space.)</p>
236 <p>Simulating a few cycles from this initial state produces the following configurations, where the result of each cycle is shown layer-by-layer at each given <code>z</code> and <code>w</code> coordinate:</p>
237 <pre><code>Before any cycles:
238
239 z=0, w=0
240 .#.
241 ..#
242 ###
243
244
245 After 1 cycle:
246
247 z=-1, w=-1
248 #..
249 ..#
250 .#.
251
252 z=0, w=-1
253 #..
254 ..#
255 .#.
256
257 z=1, w=-1
258 #..
259 ..#
260 .#.
261
262 z=-1, w=0
263 #..
264 ..#
265 .#.
266
267 z=0, w=0
268 #.#
269 .##
270 .#.
271
272 z=1, w=0
273 #..
274 ..#
275 .#.
276
277 z=-1, w=1
278 #..
279 ..#
280 .#.
281
282 z=0, w=1
283 #..
284 ..#
285 .#.
286
287 z=1, w=1
288 #..
289 ..#
290 .#.
291
292
293 After 2 cycles:
294
295 z=-2, w=-2
296 .....
297 .....
298 ..#..
299 .....
300 .....
301
302 z=-1, w=-2
303 .....
304 .....
305 .....
306 .....
307 .....
308
309 z=0, w=-2
310 ###..
311 ##.##
312 #...#
313 .#..#
314 .###.
315
316 z=1, w=-2
317 .....
318 .....
319 .....
320 .....
321 .....
322
323 z=2, w=-2
324 .....
325 .....
326 ..#..
327 .....
328 .....
329
330 z=-2, w=-1
331 .....
332 .....
333 .....
334 .....
335 .....
336
337 z=-1, w=-1
338 .....
339 .....
340 .....
341 .....
342 .....
343
344 z=0, w=-1
345 .....
346 .....
347 .....
348 .....
349 .....
350
351 z=1, w=-1
352 .....
353 .....
354 .....
355 .....
356 .....
357
358 z=2, w=-1
359 .....
360 .....
361 .....
362 .....
363 .....
364
365 z=-2, w=0
366 ###..
367 ##.##
368 #...#
369 .#..#
370 .###.
371
372 z=-1, w=0
373 .....
374 .....
375 .....
376 .....
377 .....
378
379 z=0, w=0
380 .....
381 .....
382 .....
383 .....
384 .....
385
386 z=1, w=0
387 .....
388 .....
389 .....
390 .....
391 .....
392
393 z=2, w=0
394 ###..
395 ##.##
396 #...#
397 .#..#
398 .###.
399
400 z=-2, w=1
401 .....
402 .....
403 .....
404 .....
405 .....
406
407 z=-1, w=1
408 .....
409 .....
410 .....
411 .....
412 .....
413
414 z=0, w=1
415 .....
416 .....
417 .....
418 .....
419 .....
420
421 z=1, w=1
422 .....
423 .....
424 .....
425 .....
426 .....
427
428 z=2, w=1
429 .....
430 .....
431 .....
432 .....
433 .....
434
435 z=-2, w=2
436 .....
437 .....
438 ..#..
439 .....
440 .....
441
442 z=-1, w=2
443 .....
444 .....
445 .....
446 .....
447 .....
448
449 z=0, w=2
450 ###..
451 ##.##
452 #...#
453 .#..#
454 .###.
455
456 z=1, w=2
457 .....
458 .....
459 .....
460 .....
461 .....
462
463 z=2, w=2
464 .....
465 .....
466 ..#..
467 .....
468 .....
469 </code></pre>
470 <p>After the full six-cycle boot process completes, <em><code>848</code></em> cubes are left in the <em>active</em> state.</p>
471 <p>Starting with your given initial configuration, simulate six cycles in a 4-dimensional space. <em>How many cubes are left in the active state after the sixth cycle?</em></p>
472 </article>
473 <p>Your puzzle answer was <code>2280</code>.</p><p class="day-success">Both parts of this puzzle are complete! They provide two gold stars: **</p>
474 <p>At this point, you should <a href="/2020">return to your Advent calendar</a> and try another puzzle.</p>
475 <p>If you still want to see it, you can <a href="17/input" target="_blank">get your puzzle input</a>.</p>
476 <p>You can also <span class="share">[Share<span class="share-content">on
477 <a href="https://twitter.com/intent/tweet?text=I%27ve+completed+%22Conway+Cubes%22+%2D+Day+17+%2D+Advent+of+Code+2020&amp;url=https%3A%2F%2Fadventofcode%2Ecom%2F2020%2Fday%2F17&amp;related=ericwastl&amp;hashtags=AdventOfCode" target="_blank">Twitter</a>
478 <a href="javascript:void(0);" onclick="var mastodon_instance=prompt('Mastodon Instance / Server Name?'); if(typeof mastodon_instance==='string' && mastodon_instance.length){this.href='https://'+mastodon_instance+'/share?text=I%27ve+completed+%22Conway+Cubes%22+%2D+Day+17+%2D+Advent+of+Code+2020+%23AdventOfCode+https%3A%2F%2Fadventofcode%2Ecom%2F2020%2Fday%2F17'}else{return false;}" target="_blank">Mastodon</a
479 ></span>]</span> this puzzle.</p>
480 </main>
481
482 <!-- ga -->
483 <script>
484 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
485 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
486 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
487 })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
488 ga('create', 'UA-69522494-1', 'auto');
489 ga('set', 'anonymizeIp', true);
490 ga('send', 'pageview');
491 </script>
492 <!-- /ga -->
493 </body>
494 </html>