Description
You come across an experimental new kind of memory stored on an infinite two-dimensional grid.
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 between the location of the data and square 1
.
For example:
- Data from square
1
is carried0
steps, since it's at the access port. - Data from square
12
is carried3
steps, such as: down, left, left. - Data from square
23
is carried only2
steps: up twice. - Data from square
1024
must be carried31
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?
Notes
- Part I: There feels like there should be an equation for this: given the number of complete spirals, generate all the numbers. In other words, a Spiral of 1 is just
1
, but a spiral of 2 is:5 4 3 6 1 2 7 8 9
- Also, I can't seem to find a way in Ruby/Crystal to split the input into
map
andmoves
variables, despite trying something likeinput.split(/^\n{2,}$/)
.
- Also, I can't seem to find a way in Ruby/Crystal to split the input into