74 lines
2.6 KiB
Markdown
74 lines
2.6 KiB
Markdown
|
## \-\-- Day 3: Spiral Memory \-\--
|
||
|
|
||
|
You come across an experimental new kind of memory stored on an
|
||
|
[infinite two-dimensional
|
||
|
grid]{title="Good thing we have all these infinite two-dimensional grids lying around!"}.
|
||
|
|
||
|
Each square on the grid is allocated in a spiral pattern starting at a
|
||
|
location marked `1` and then counting up while spiraling outward. For
|
||
|
example, the first few squares are allocated like this:
|
||
|
|
||
|
17 16 15 14 13
|
||
|
18 5 4 3 12
|
||
|
19 6 1 2 11
|
||
|
20 7 8 9 10
|
||
|
21 22 23---> ...
|
||
|
|
||
|
While this is very space-efficient (no squares are skipped), requested
|
||
|
data must be carried back to square `1` (the location of the only access
|
||
|
port for this memory system) by programs that can only move up, down,
|
||
|
left, or right. They always take the shortest path: the [Manhattan
|
||
|
Distance](https://en.wikipedia.org/wiki/Taxicab_geometry) between the
|
||
|
location of the data and square `1`.
|
||
|
|
||
|
For example:
|
||
|
|
||
|
- Data from square `1` is carried `0` steps, since it\'s at the access
|
||
|
port.
|
||
|
- Data from square `12` is carried `3` steps, such as: down, left,
|
||
|
left.
|
||
|
- Data from square `23` is carried only `2` steps: up twice.
|
||
|
- Data from square `1024` must be carried `31` steps.
|
||
|
|
||
|
*How many steps* are required to carry the data from the square
|
||
|
identified in your puzzle input all the way to the access port?
|
||
|
|
||
|
Your puzzle answer was `371`.
|
||
|
|
||
|
The first half of this puzzle is complete! It provides one gold star: \*
|
||
|
|
||
|
## \-\-- Part Two \-\-- {#part2}
|
||
|
|
||
|
As a stress test on the system, the programs here clear the grid and
|
||
|
then store the value `1` in square `1`. Then, in the same allocation
|
||
|
order as shown above, they store the sum of the values in all adjacent
|
||
|
squares, including diagonals.
|
||
|
|
||
|
So, the first few squares\' values are chosen as follows:
|
||
|
|
||
|
- Square `1` starts with the value `1`.
|
||
|
- Square `2` has only one adjacent filled square (with value `1`), so
|
||
|
it also stores `1`.
|
||
|
- Square `3` has both of the above squares as neighbors and stores the
|
||
|
sum of their values, `2`.
|
||
|
- Square `4` has all three of the aforementioned squares as neighbors
|
||
|
and stores the sum of their values, `4`.
|
||
|
- Square `5` only has the first and fourth squares as neighbors, so it
|
||
|
gets the value `5`.
|
||
|
|
||
|
Once a square is written, its value does not change. Therefore, the
|
||
|
first few squares would receive the following values:
|
||
|
|
||
|
147 142 133 122 59
|
||
|
304 5 4 2 57
|
||
|
330 10 1 1 54
|
||
|
351 11 23 25 26
|
||
|
362 747 806---> ...
|
||
|
|
||
|
What is the *first value written* that is *larger* than your puzzle
|
||
|
input?
|
||
|
|
||
|
Answer:
|
||
|
|
||
|
Your puzzle input is still `368078`{.puzzle-input}.
|