Finished on 2023-12-08 p2
This commit is contained in:
parent
06fcf5f80c
commit
953be2f650
@ -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':
|
||||
steps += 1
|
||||
current = nodes[current].left if d[count%len(d)] == 'L' else nodes[current].right
|
||||
count += 1
|
||||
print(steps)
|
||||
except:
|
||||
print()
|
||||
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)
|
||||
|
||||
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):
|
||||
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
|
||||
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
|
||||
print(steps)
|
||||
|
||||
total_s.append(steps)
|
||||
print("Part 2: ",end='')
|
||||
print(lcm(*total_s))
|
||||
|
Loading…
Reference in New Issue
Block a user