Files
python-aoc-2023/day08/part2.py
Sebastian Seedorf aaecd0a396 Day 08
2023-12-08 13:25:45 +01:00

29 lines
666 B
Python

#!/usr/bin/env python3
import functools
lines = (x.strip() for x in open("input.txt"))
instructions = tuple(int(char == "R") for char in next(lines))
next(lines)
nodes = {line[:3]: (line[7:10], line[12:15]) for line in lines}
def get_loop(node: str):
cnt = 0
while True:
for char in instructions:
node = nodes[node][char]
cnt += 1
if node[2] == "Z":
return cnt
def lcm(a, b):
mul = abs(a * b)
while b:
a, b = b, a % b
return mul // a
curr_nodes = tuple(key for key in nodes.keys() if key[2] == "A")
loops = map(get_loop, curr_nodes)
print(functools.reduce(lcm, loops, 1))