Solve 2017/03
This commit is contained in:
parent
0969017c4d
commit
9529443943
1 changed files with 64 additions and 0 deletions
64
2017/03/solve.py
Normal file
64
2017/03/solve.py
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
import sys
|
||||
|
||||
# PART 1
|
||||
|
||||
def spiral(nth):
|
||||
length = 1
|
||||
nth -= 1
|
||||
x = 0
|
||||
y = 0
|
||||
while True:
|
||||
x += min(length, nth)
|
||||
nth -= min(length, nth)
|
||||
if nth == 0: return x, y
|
||||
y += min(length, nth)
|
||||
nth -= min(length, nth)
|
||||
if nth == 0: return x, y
|
||||
|
||||
length += 1
|
||||
|
||||
x -= min(length, nth)
|
||||
nth -= min(length, nth)
|
||||
if nth == 0: return x, y
|
||||
y -= min(length, nth)
|
||||
nth -= min(length, nth)
|
||||
if nth == 0: return x, y
|
||||
|
||||
length += 1
|
||||
|
||||
def manhattan(x, y):
|
||||
return abs(x) + abs(y)
|
||||
|
||||
# PART 2
|
||||
|
||||
def store(cap):
|
||||
stored = {(0, 0): 1}
|
||||
nth = 2
|
||||
while True:
|
||||
x, y = spiral(nth)
|
||||
adjacent = 0
|
||||
adjacent += stored.get((x-1, y-1), 0)
|
||||
adjacent += stored.get((x , y-1), 0)
|
||||
adjacent += stored.get((x+1, y-1), 0)
|
||||
adjacent += stored.get((x-1, y ), 0)
|
||||
adjacent += stored.get((x+1, y ), 0)
|
||||
adjacent += stored.get((x-1, y+1), 0)
|
||||
adjacent += stored.get((x , y+1), 0)
|
||||
adjacent += stored.get((x+1, y+1), 0)
|
||||
stored[(x, y)] = adjacent
|
||||
nth += 1
|
||||
|
||||
if adjacent > cap:
|
||||
return adjacent
|
||||
|
||||
def main():
|
||||
nth = 277678
|
||||
print(f"Solutions")
|
||||
x, y = spiral(nth)
|
||||
dist = manhattan(x, y)
|
||||
print(f"Part 1: {dist}")
|
||||
adjacent = store(nth)
|
||||
print(f"Part 2: {adjacent}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue