Compare commits
2 Commits
0478a8789a
...
6ddcc106ec
Author | SHA1 | Date | |
---|---|---|---|
6ddcc106ec | |||
8ec6322f51 |
21
2017/02/2checksum.py
Executable file
21
2017/02/2checksum.py
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
total = 0
|
||||||
|
with open("input", "r", encoding="utf-8") as sheet:
|
||||||
|
remainder = []
|
||||||
|
for line in sheet:
|
||||||
|
values = list(map(int, line.split()))
|
||||||
|
values.sort()
|
||||||
|
result = ""
|
||||||
|
i = 1
|
||||||
|
while i < len(values) and result == "":
|
||||||
|
j = 0
|
||||||
|
while j >= 0 and j < i and result == "":
|
||||||
|
remainder = values[i] % values[j]
|
||||||
|
if remainder == 0:
|
||||||
|
result = int(values[i] / values[j])
|
||||||
|
j += 1
|
||||||
|
i += 1
|
||||||
|
total += result
|
||||||
|
print(total)
|
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