diff options
Diffstat (limited to '2022/day09.py')
| -rwxr-xr-x | 2022/day09.py | 115 |
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) + |
