aboutsummaryrefslogtreecommitdiff
path: root/2023/08/solve.py
diff options
context:
space:
mode:
authorMarvin Borner2023-12-08 13:42:32 +0100
committerMarvin Borner2023-12-08 13:42:32 +0100
commit7ccfab448361f8bd00a6974701f35997bb03d7f6 (patch)
tree85e50debd6c74658996193447ad441b6a67997d3 /2023/08/solve.py
parent3a66da513f561e79aecce9c1a470ad34442bc675 (diff)
Mathemann
Diffstat (limited to '2023/08/solve.py')
-rw-r--r--2023/08/solve.py31
1 files changed, 18 insertions, 13 deletions
diff --git a/2023/08/solve.py b/2023/08/solve.py
index 61742f4..957cee1 100644
--- a/2023/08/solve.py
+++ b/2023/08/solve.py
@@ -6,29 +6,34 @@ nodes = dict(
)
-def part1():
+def part1(start):
steps = 0
- curr = "AAA"
+ curr = start
while True:
d = path[steps % len(path)]
curr = nodes[curr][0 if d == "L" else 1]
steps += 1
- if curr == "ZZZ":
+ if curr[2] == "Z":
return steps
+def lcm(steps):
+ bi_gcd = lambda m, n: m if not n else bi_gcd(n, m % n)
+ res = steps[0]
+ for s in steps[1:]:
+ res = s * (res // bi_gcd(res, s))
+ return res
+
+
def part2():
- steps = 0
+ steps = []
curr = [k for k in nodes.keys() if k[2] == "A"]
- para = len(curr)
- while True:
- d = path[steps % len(path)]
- for i in range(para):
- curr[i] = nodes[curr[i]][0 if d == "L" else 1]
- steps += 1
- if len([k for k in curr if k[2] == "Z"]) == para:
- return steps
+ for s in curr:
+ steps.append(part1(s))
+
+ # modulo ring yay
+ return lcm(steps)
-# print(part1())
+print(part1("AAA"))
print(part2())