diff options
| author | nekineki <nekineki@nekineki.net> | 2022-12-11 14:47:27 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2022-12-11 14:50:32 +0100 |
| commit | fe75c10e350743a1c078f065d69556fecf825ca5 (patch) | |
| tree | 956556a564c9329346dc9d8b1535dc5e365f3d55 /2022/day09.py | |
| parent | a74d2dc54aef546664bcc8c81eb8e01a93e94391 (diff) | |
move files around, update paths
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) + |
