[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

67
py/aoc/y2017/d03.py Normal file
View file

@ -0,0 +1,67 @@
# 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 solve(inputstr):
nth = int(inputstr.strip())
x, y = spiral(nth)
dist = manhattan(x, y)
print(f"Part 1: {dist}")
adjacent = store(nth)
print(f"Part 2: {adjacent}")