#!/bin/python3 import re import sys from pprint import pprint from collections import Counter import numpy as np from math import lcm input_f = sys.argv[1] def pp(x): for i in x: print(nodes[i].value,nodes[i].left,nodes[i].right) d, *maps = open(input_f).read().split('\n') class Node(): def __init__(self,value,left,right): self.value = value self.left = left self.right = right nodes = {} for i in maps: if i == '': continue nodes[i[:3]] = Node(i[:3],i[7:10],i[12:15]) current = 'AAA' steps = 0 count = 0 while current != 'ZZZ': steps += 1 current = nodes[current].left if d[count%len(d)] == 'L' else nodes[current].right count += 1 print('Part 1: ',end='') print(steps) current = [] for i in nodes: if i.endswith('A'): current.append(i) count = 0 steps = 0 total_s = [] for i in current: count = 0 steps = 0 while not i.endswith('Z'): steps += 1 i = nodes[i].left if d[count%len(d)] == 'L' else nodes[i].right count += 1 total_s.append(steps) print("Part 2: ",end='') print(lcm(*total_s))