day 8, somewhat easy

part 1 realy easy
part 2 made with a trick, got from reddit megathread
else naive approach would have taken 40 day of computation
This commit is contained in:
setop 2023-12-08 11:30:30 +01:00
parent baabb6cd88
commit 492af0c576
2 changed files with 46 additions and 0 deletions

24
d08/part1.py Normal file
View File

@ -0,0 +1,24 @@
import sys
from itertools import cycle
L = [l for l in sys.stdin.read().splitlines()]
I = L[0] # instructions
for l in L[2:]:
print(f'%{l}%')
Q = [l.split(' = ') for l in L[2:] ]
P = {k:v[1:-1].split(", ") for [k,v] in Q }
print(P)
C = 'AAA'
N = 0
for i in cycle(I):
if C == 'ZZZ':
break
C = P[C][i == 'R']
N += 1
print(C)
print(N)

22
d08/part2.py Normal file
View File

@ -0,0 +1,22 @@
import sys
from itertools import cycle
from math import lcm
I, _, *P = [l for l in sys.stdin.read().splitlines()]
Q = [l.split(' = ') for l in P ]
P = {k:v[1:-1].split(", ") for [k,v] in Q }
G = [p for p in P.keys() if p[2] == 'A' ]
R = []
for n,g in enumerate(G):
print(n+1, g, '', end='')
C = g
N = 0
for i in cycle(I):
if C[2] == 'Z':
break
C = P[C][i == 'R']
N += 1
print(N)
R.append(N)
print('steps: sum:', sum(R), 'lcm:', lcm(*R))