Day 22: Rolling a new emacs conf from scratch
This commit is contained in:
parent
455e497f42
commit
674be1ce64
1 changed files with 57 additions and 0 deletions
57
day22.py
Normal file
57
day22.py
Normal 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)
|
Loading…
Add table
Reference in a new issue