From 492af0c576124030a6eb15faf3d296fcf3f59f49 Mon Sep 17 00:00:00 2001 From: setop Date: Fri, 8 Dec 2023 11:30:30 +0100 Subject: [PATCH] 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 --- d08/part1.py | 24 ++++++++++++++++++++++++ d08/part2.py | 22 ++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 d08/part1.py create mode 100644 d08/part2.py diff --git a/d08/part1.py b/d08/part1.py new file mode 100644 index 0000000..865b512 --- /dev/null +++ b/d08/part1.py @@ -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) \ No newline at end of file diff --git a/d08/part2.py b/d08/part2.py new file mode 100644 index 0000000..77e6591 --- /dev/null +++ b/d08/part2.py @@ -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))