aoc/2022/day9.py
2023-04-17 20:18:20 +02:00

106 lines
3.2 KiB
Python
Executable file

#!/bin/python3
moves = []
with open('day9.txt', 'r') as f:
for line in f:
[direc, count] = line.split(' ')
count = int(count)
for i in range(count):
moves.append(direc)
hlocs = []
hloc = (0, 0)
for move in moves:
if move == 'U':
hloc = (hloc[0], hloc[1]-1)
if move == 'D':
hloc = (hloc[0], hloc[1]+1)
if move == 'R':
hloc = (hloc[0]+1, hloc[1])
if move == 'L':
hloc = (hloc[0]-1, hloc[1])
hlocs.append(hloc)
tlocs = set([(0, 0)])
tloc = (0, 0)
for hloc in hlocs:
if abs(hloc[0] - tloc[0]) > 1 or abs(hloc[1] - tloc[1]) > 1:
if hloc[0] < tloc[0]:
tloc = (tloc[0]-1, tloc[1])
elif hloc[0] > tloc[0]:
tloc = (tloc[0]+1, tloc[1])
if hloc[1] < tloc[1]:
tloc = (tloc[0], tloc[1]-1)
elif hloc[1] > tloc[1]:
tloc = (tloc[0], tloc[1]+1)
else:
if hloc[0] == tloc[0]+2:
tloc = (tloc[0]+1, tloc[1])
elif hloc[0] == tloc[0]-2:
tloc = (tloc[0]-1, tloc[1])
elif hloc[1] == tloc[1]+2:
tloc = (tloc[0], tloc[1]+1)
elif hloc[1] == tloc[1]-2:
tloc = (tloc[0], tloc[1]-1)
tlocs.add(tloc)
print("part1", len(tlocs))
def print_state(n, parts):
for y in range(-n, n):
for x in range(-n, n):
printed = False
for i in range(10):
if parts[i][0] == x and parts[i][1] == y:
printed = True
print(str(i), end='')
break
if not printed:
print('#', end='')
print('')
print('')
parts = []
visited = set([(0, 0)])
for i in range(10):
parts.append((0, 0))
for move in moves:
print(move)
for i in range(10):
if i == 0:
if move == 'R':
parts[0] = (parts[0][0]+1, parts[0][1])
if move == 'L':
parts[0] = (parts[0][0]-1, parts[0][1])
if move == 'U':
parts[0] = (parts[0][0], parts[0][1]-1)
if move == 'D':
parts[0] = (parts[0][0], parts[0][1]+1)
else:
(prevx, prevy) = parts[i-1]
if abs(prevx - parts[i][0]) > 1 or abs(prevy - parts[i][1]) > 1:
if prevx < parts[i][0]:
parts[i] = (parts[i][0]-1, parts[i][1])
elif prevx > parts[i][0]:
parts[i] = (parts[i][0]+1, parts[i][1])
if prevy < parts[i][1]:
parts[i] = (parts[i][0], parts[i][1]-1)
elif prevy > parts[i][1]:
parts[i] = (parts[i][0], parts[i][1]+1)
else:
if prevx == parts[i][0]+2:
parts[i] = (parts[i][0]+1, parts[i][1])
elif prevx == parts[i][0]-2:
parts[i] = (parts[i][0]-1, parts[i][1])
elif prevy == parts[i][1]+2:
parts[i] = (parts[i][0], parts[i][1]+1)
elif prevy == parts[i][1]-2:
parts[i] = (parts[i][0], parts[i][1]-1)
if i == 9:
visited.add(parts[-1])
print_state(5, parts)
print('part2', len(visited))