Solve 2024 day 22

This commit is contained in:
2024-12-22 00:31:27 -05:00
parent 3979a60fa4
commit 265829715a
2 changed files with 62 additions and 2 deletions

56
2024/d22.py Normal file
View File

@@ -0,0 +1,56 @@
from lib import get_data
from lib import ints
from collections import defaultdict
data = get_data(__file__)
def secret(x):
x ^= x * 64
x %= 16777216
x ^= x // 32
x %= 16777216
x ^= x * 2048
x %= 16777216
return x
def slice(xs, n):
return [slice for slice in zip(*[xs[i:] for i in range(n)])]
codes = defaultdict(int)
def int_seq(x):
xs = []
for _ in range(2000):
xs.append(x % 10)
x = secret(x)
ds = [a - b for a, b in zip(xs[1:], xs)]
seen = set()
for s in slice(list(zip(xs[1:], ds)), 4):
code = tuple([e[1] for e in s])
v = s[-1][0]
if not code in seen:
codes[code] += v
seen.add(code)
for line in data.splitlines():
(x,) = ints(line)
s = 0
for line in data.splitlines():
(x,) = ints(line)
int_seq(x)
for _ in range(2000):
x = secret(x)
s += x
print(s)
print(max(codes.values()))