-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday25.py
More file actions
36 lines (32 loc) · 778 Bytes
/
day25.py
File metadata and controls
36 lines (32 loc) · 778 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import sys
infile = sys.argv[1] if len(sys.argv)>1 else 'aoc2021/25.in'
data = open(infile).read().strip()
G = []
for line in data.split('\n'):
assert line.strip() == line
G.append(line)
R = len(G)
C = len(G[0])
t = 0
while True:
t += 1
moved = False
G2 = [[G[r][c] for c in range(C)] for r in range(R)]
for r in range(R):
for c in range(C):
if G[r][c] == '>':
if G[r][(c+1)%C] == '.':
moved = True
G2[r][(c+1)%C] = '>'
G2[r][c] = '.'
G3 = [[G2[r][c] for c in range(C)] for r in range(R)]
for r in range(R):
for c in range(C):
if G2[r][c] == 'v' and G2[(r+1)%R][c] == '.':
moved = True
G3[(r+1)%R][c] = 'v'
G3[r][c] = '.'
if not moved:
print(t)
sys.exit(0)
G = G3