advent-of-code/2024-python/output/day_22.py

45 lines
1 KiB
Python
Raw Normal View History

import math
from collections import deque, defaultdict
from output import ints
def solve(data):
s = [(n, n % 10) for n in ints(data)]
bananas = defaultdict(int)
sum_2000th_secrets = 0
for j, n in enumerate(s):
seen = set()
L = deque()
for i in range(2000):
prize, dff = calc(*n)
if len(L) == 4:
L.popleft()
L.append(dff)
if len(L) == 4:
if tuple(L) not in seen:
seen.add(tuple(L))
bananas[tuple(L)] += prize % 10
n = prize, dff
sum_2000th_secrets += prize
max_bananas = max(bananas.values())
return sum_2000th_secrets, max_bananas
def calc(i, d=0):
a = i % 10
i = ((i * 64) ^ i) % 16777216
i = (math.floor(i / 32) ^ i) % 16777216
i = ((i * 2048) ^ i) % 16777216
return i, (i % 10) - a
if __name__ == "__main__":
with open("./input/22.txt", "r") as f:
inp = f.read().strip()
p1, p2 = solve(inp)
print(p1)
print(p2)