[py] Port 2017_03

This commit is contained in:
Joscha 2022-12-06 19:38:11 +01:00
parent 7ac215b493
commit d3d8a493f1
3 changed files with 69 additions and 65 deletions

View file

@ -1,64 +0,0 @@
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()