Finished on 2023-12-08 p2

This commit is contained in:
FrederikBaerentsen 2023-12-08 18:45:14 +01:00
parent 06fcf5f80c
commit 953be2f650

View File

@ -5,6 +5,7 @@ import sys
from pprint import pprint
from collections import Counter
import numpy as np
from math import lcm
input_f = sys.argv[1]
@ -12,53 +13,31 @@ 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
s = []
l = []
r = []
maps = maps
nodes = {}
for i in maps:
if i == '':
continue
s = i[:3]
l = i[7:10]
r = i[12:15]
nodes[s] = Node(s,l,r)
nodes[i[:3]] = Node(i[:3],i[7:10],i[12:15])
current = 'AAA'
steps = 0
count = 0
try:
while current != 'ZZZ':
while current != 'ZZZ':
steps += 1
current = nodes[current].left if d[count%len(d)] == 'L' else nodes[current].right
count += 1
print(steps)
except:
print()
print('Part 1: ',end='')
print(steps)
def done(x):
print(x)
for i in x:
if not i.endswith('Z'):
return False
return True
pp(nodes)
current = []
for i in nodes:
@ -66,15 +45,14 @@ for i in nodes:
current.append(i)
count = 0
steps = 0
while not done(current):
total_s = []
for i in current:
count = 0
steps = 0
while not i.endswith('Z'):
steps += 1
for i in range(len(current)):
if d[count%len(d)] == 'L':
#print("Going left from " + str(current[i]) + " to " + str(nodes[current[i]].left))
current[i] = nodes[current[i]].left
else:
#print("Going right from " + str(current[i]) + " to " + str(nodes[current[i]].right))
current[i] = nodes[current[i]].right
i = nodes[i].left if d[count%len(d)] == 'L' else nodes[i].right
count += 1
print(steps)
total_s.append(steps)
print("Part 2: ",end='')
print(lcm(*total_s))