blob: 61742f4124f3383ddb79b41925a2e9bbf7b5e4a7 (
plain) (
blame)
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
|
L = [l.strip() for l in open("input").readlines()]
path = L[0]
nodes = dict(
(p := n.split(" = ")) and (p[0], p[1][1:-1].split(", ")) for n in L[2:]
)
def part1():
steps = 0
curr = "AAA"
while True:
d = path[steps % len(path)]
curr = nodes[curr][0 if d == "L" else 1]
steps += 1
if curr == "ZZZ":
return steps
def part2():
steps = 0
curr = [k for k in nodes.keys() if k[2] == "A"]
para = len(curr)
while True:
d = path[steps % len(path)]
for i in range(para):
curr[i] = nodes[curr[i]][0 if d == "L" else 1]
steps += 1
if len([k for k in curr if k[2] == "Z"]) == para:
return steps
# print(part1())
print(part2())
|