aboutsummaryrefslogtreecommitdiff
path: root/2023/08/solve.py
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())