completed 2017.03.1
This commit is contained in:
parent
8ec6322f51
commit
6ddcc106ec
41
2017/03/1spiral_memory.py
Executable file
41
2017/03/1spiral_memory.py
Executable file
@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env python3
|
||||
if __name__ == '__main__':
|
||||
target = 277678
|
||||
xstep = 1
|
||||
ystep = 1
|
||||
origin = [0, 0]
|
||||
square = 1
|
||||
pointer = origin
|
||||
|
||||
def inc_step(step):
|
||||
if step >= 0:
|
||||
return int(-1 * (step + 1))
|
||||
else:
|
||||
return int(-1 * (step - 1))
|
||||
|
||||
while square < target:
|
||||
i = 1
|
||||
while i <= abs(xstep) and square < target:
|
||||
square += 1
|
||||
if xstep >= 0:
|
||||
pointer[0] += 1
|
||||
else:
|
||||
pointer[0] += -1
|
||||
i += 1
|
||||
xstep = inc_step(xstep)
|
||||
|
||||
i = 1
|
||||
while i <= abs(ystep) and square < target:
|
||||
square += 1
|
||||
if ystep >= 0:
|
||||
pointer[1] += 1
|
||||
else:
|
||||
pointer[1] += -1
|
||||
i += 1
|
||||
ystep = inc_step(ystep)
|
||||
|
||||
if square == target:
|
||||
xloc = pointer[0]
|
||||
yloc = pointer[1]
|
||||
distance = abs(xloc) + abs(yloc)
|
||||
print(f"dist to square {target} is {int(abs(xloc))}+{int(abs(yloc))}={distance}")
|
62
2017/03/notes
Normal file
62
2017/03/notes
Normal file
@ -0,0 +1,62 @@
|
||||
spiral memory!
|
||||
|
||||
i think i'll keep a live count of the current position relative to square 1,
|
||||
slowly stepping one by one through each square sequentially.
|
||||
my input is only 277678, so this should be fine!
|
||||
|
||||
i notice that the pointer starts at square 1, at, say, (0,0),
|
||||
and then moves one square right, then one up,
|
||||
then two left, then two down,
|
||||
then three right, three up, etc
|
||||
|
||||
seems like it follows the pattern:
|
||||
|
||||
(x1 , y1 ) = (0 , 0 )
|
||||
(x2 , y2 ) = (x1 + 1 , y1 )
|
||||
(x3 , y3 ) = (x2 , y1 + 1)
|
||||
(x5 , y5 ) = (x3 - 2 , y3 )
|
||||
(x7 , y7 ) = (x5 , y3 - 2)
|
||||
(x10, y10) = (x5 + 3 , y7 )
|
||||
etc.
|
||||
|
||||
i'll just for loop this shit
|
||||
something like: (copied to 1spiral_memory.py and worked further from there)
|
||||
(the following is my first rough sketch. see 1spiral_memory.py)
|
||||
|
||||
target = 277678
|
||||
xstep = 1
|
||||
ystep = 1
|
||||
origin = (0, 0)
|
||||
square = 1
|
||||
pointer = origin
|
||||
|
||||
def inc_step(step):
|
||||
if step >= 0:
|
||||
return int(-1 * (step + 1))
|
||||
else:
|
||||
return int(-1 * (step - 1))
|
||||
|
||||
while square < target:
|
||||
i = 1
|
||||
while i <= abs(xstep) and square < target:
|
||||
square += 1
|
||||
if xstep >= 0:
|
||||
pointer += (1, 0)
|
||||
else:
|
||||
pointer -= (1, 0)
|
||||
i += 1
|
||||
xstep = inc_step(xstep)
|
||||
|
||||
i = 1
|
||||
while i <= abs(ystep) and square < target:
|
||||
square += 1
|
||||
if ystep >= 0:
|
||||
pointer += (0, 1)
|
||||
else:
|
||||
pointer -= (0, 1)
|
||||
ystep = inc_step(ystep)
|
||||
|
||||
if square == target:
|
||||
xloc = pointer[0]
|
||||
yloc = pointer[1]
|
||||
distance = abs(xloc) + abs(yloc)
|
Loading…
x
Reference in New Issue
Block a user