Day 22: Rolling a new emacs conf from scratch

This commit is contained in:
Armin Friedl 2024-12-29 10:08:47 +01:00
parent 455e497f42
commit 674be1ce64

57
day22.py Normal file
View file

@ -0,0 +1,57 @@
#!/usr/bin/env python3
from collections import defaultdict
initial_secrets = []
with open("day22") as f:
initial_secrets = list(map(int, f))
def calc_secrets(init: int, cnt: int) -> list[int]:
sec = init
col = [init]
for _ in range(cnt):
sec = (sec ^ (sec * 64)) % 16777216
sec = (sec ^ (sec // 32)) % 16777216
sec = (sec ^ (sec * 2048)) % 16777216
col.append(sec)
return col
# part 1
res = 0
for init in initial_secrets:
secrets = calc_secrets(init, 2000)
res += secrets[-1]
print(res)
# part 2
def calc_prices(init: int, cnt: int) -> list[int]:
return [s%10 for s in calc_secrets(init, cnt)]
def calc_diffs(prices: list[int]) -> list[int]:
return [0] + [b-a for a,b in zip(prices, prices[1:])]
def calc_seq_price(prices, diffs):
seq_price = {}
for i in range(0,len(diffs)-4):
seq = (diffs[i], diffs[i+1], diffs[i+2], diffs[i+3])
price = prices[i+3]
if seq not in seq_price:
seq_price[seq] = price
return seq_price
all_prices = [calc_prices(init, 2000) for init in initial_secrets]
all_diffs = [calc_diffs(prices) for prices in all_prices]
all_seq_prices = [calc_seq_price(prices, diffs) for prices,diffs in zip(all_prices, all_diffs)]
seq_price_total = defaultdict(int)
for seq_price in all_seq_prices:
for s,p in seq_price.items():
seq_price_total[s] += p
max_seq, max_price = sorted(seq_price_total.items(), key=lambda x: x[1], reverse=True)[0]
print(max_price)