aoc2024/d22/part2.py

29 lines
705 B
Python
Raw Permalink Normal View History

2024-12-23 23:52:05 +00:00
import sys
mask = 16777216-1
def ng(n:int) -> int:
n ^= (n << 6) & mask
n ^= (n >> 5) & mask
n ^= (n << 11) & mask
return n
ranges = dict()
for seed in map(int,sys.stdin.read().strip().split('\n')):
visited = set()
pseed = seed % 10
key = 0
for i in range(2000):
nextSeed = ng(seed)
nseed = nextSeed %10
change = 9 + nseed - pseed
key = (key * 19 + change) % 130321
if i>2:
if key not in visited:
if key not in ranges:
ranges[key] = 0
ranges[key] += nseed
visited.add(key)
seed = nextSeed
pseed = nseed
print(max(ranges.values()))