day 9 python part 2

main
magical 2022-12-08 21:24:52 -08:00
parent 036a563d8f
commit 8cb5086749
1 changed files with 35 additions and 1 deletions

View File

@ -31,6 +31,25 @@ def follow():
y += sgn(H[1] - T[1]) y += sgn(H[1] - T[1])
return x,y return x,y
def follow2(h, t):
if h == t:
return t
if abs(h[0] - t[0]) <= 1 and abs(h[1] - t[1]) <= 1:
return t
if h[1] == t[1]:
x,y = t
x = h[0] - sgn(h[0] - t[0])
return x,y
if h[0] == t[0]:
x,y = t
y = h[1] - sgn(h[1]-t[1])
return x,y
# diagonal
x,y = t
x += sgn(h[0] - t[0])
y += sgn(h[1] - t[1])
return x,y
def sgn(x): def sgn(x):
if x==0: return 0 if x==0: return 0
if x > 0: return 1 if x > 0: return 1
@ -44,7 +63,22 @@ for line in open("input"):
H = go(H, dir) H = go(H, dir)
T = follow() T = follow()
visited.add(T) visited.add(T)
print(H,T) #print(H,T)
print(len(visited)) print(len(visited))
R = [(0,0)]*10
visited = set([R[-1]])
for line in open("input"):
dir, count = line.split()
count = int(count)
for _ in range(count):
R[0] = go(R[0], dir)
for i in range(1,len(R)):
t = follow2(R[i-1], R[i])
if t == R[i]:
break
R[i] = t
visited.add(R[-1])
print(R)
print(len(visited))