aboutsummaryrefslogtreecommitdiff
path: root/2024
diff options
context:
space:
mode:
authorMarvin Borner2024-12-22 12:40:44 +0100
committerMarvin Borner2024-12-22 12:40:44 +0100
commit577a714d557270bdc1d87bdbe8f94b06aca0b8a8 (patch)
tree06ef011ddb894adb66a95b3bcb141a282a58e294 /2024
parent3f614a3bc0088ba727e9251df27a591b0d788da7 (diff)
k
Diffstat (limited to '2024')
-rwxr-xr-x2024/22/solve.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/2024/22/solve.py b/2024/22/solve.py
new file mode 100755
index 0000000..f6fe00f
--- /dev/null
+++ b/2024/22/solve.py
@@ -0,0 +1,49 @@
+#!/bin/env python3
+
+L = [int(l.strip()) for l in open("input").readlines()]
+
+
+def evolve(n):
+ n ^= n * 64
+ n %= 16777216
+
+ n ^= n // 32
+ n %= 16777216
+
+ n ^= n * 2048
+ n %= 16777216
+
+ return n
+
+
+def part1(n):
+ for i in range(2000):
+ n = evolve(n)
+ return n
+
+
+def part2():
+ M = {}
+ for n in L:
+ diffs = []
+ vals = [0]
+ for i in range(2000):
+ n = evolve(n)
+ s = n % 10
+ diffs.append(s - vals[-1])
+ vals.append(s)
+
+ s = set()
+ for i in range(4, len(vals)):
+ r = tuple(diffs[i - 4 : i])
+ if r not in s:
+ if r in M:
+ M[r] += vals[i]
+ else:
+ M[r] = vals[i]
+ s.add(r)
+ return M[max(M, key=M.get)]
+
+
+print(sum(part1(n) for n in L))
+print(part2())