summaryrefslogtreecommitdiff
path: root/2022/day09.py
diff options
context:
space:
mode:
Diffstat (limited to '2022/day09.py')
-rwxr-xr-x2022/day09.py115
1 files changed, 115 insertions, 0 deletions
diff --git a/2022/day09.py b/2022/day09.py
new file mode 100755
index 0000000..59bdf04
--- /dev/null
+++ b/2022/day09.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python3
+
+# import numpy as np
+from functools import reduce
+from re import findall
+from copy import deepcopy
+import sys
+import time
+
+animate = False
+# filename = "in/day09.ref"
+# filename = "in/day09_2.ref"
+filename = "in/day09.pzl"
+data = open(filename).read()
+lines = [line for line in data.rstrip('\n').split('\n')]
+
+
+moves = []
+for a in lines:
+ m = [0, 0]
+ direction, count = a.split(' ')
+ if direction == 'R':
+ m = [1, 0]
+ elif direction == 'U':
+ m = [0, 1]
+ elif direction == 'D':
+ m = [0, -1]
+ elif direction == 'L':
+ m = [-1, 0]
+
+ # m = [int(count)*i for i in m]
+ for _ in range(int(count)):
+ moves.append(m)
+
+# print(moves)
+
+res1 = 0
+h = [0,0]
+t = [0,0]
+visited = set()
+visited.add(tuple(t))
+
+for m in moves:
+ h = [hi + mi for hi,mi in zip(h,m)]
+
+ dx = h[0] - t[0]
+ dy = h[1] - t[1]
+
+ if abs(dx) > 1 or (abs(dx) > 0 and abs(dy) > 1):
+ t[0] += dx//abs(dx)
+
+ if abs(dy) > 1 or (abs(dy) > 0 and abs(dx) > 1):
+ t[1] += dy//abs(dy)
+
+ visited.add(tuple(t))
+
+
+res2 = 0
+ht = [[0,0] for i in range(10)]
+visited9 = set()
+visited9.add(tuple(ht[9]))
+
+
+def print_grid(arr, c=''):
+ lx = 100
+ ly = 40
+ grid = [['.' for _ in range(lx)] for _ in range(ly)]
+
+ for i, (x, y) in enumerate(arr):
+ try:
+ grid[-y+ly//2][x+lx//2] = c if c!='' else str(i)
+ except:
+ pass
+
+ grid[ly//2][lx//2] = "s"
+
+ print('\x1b[2J')
+ for line in grid:
+ for c in line:
+ print(c, end="")
+ print("")
+ time.sleep(1/20)
+
+for m in moves:
+ ht[0] = [hi + mi for hi,mi in zip(ht[0],m)]
+
+ for i,_ in enumerate(ht):
+ if i == 0:
+ continue
+ dx = ht[i-1][0] - ht[i][0]
+ dy = ht[i-1][1] - ht[i][1]
+
+ if abs(dx) > 1 or (abs(dx) > 0 and abs(dy) > 1):
+ ht[i][0] += dx//abs(dx)
+
+ if abs(dy) > 1 or (abs(dy) > 0 and abs(dx) > 1):
+ ht[i][1] += dy//abs(dy)
+
+ # print(ht)
+ visited9.add(tuple(ht[9]))
+
+ if animate:
+ print_grid(ht)
+
+# print(visited9)
+
+res1 = len(visited)
+res2 = len(visited9)
+
+if animate == True:
+ print_grid(visited9, c='#')
+else:
+ print('res1:', res1)
+ print('res2:', res2)
+