diff --git a/day22.py b/day22.py new file mode 100644 index 0000000..2d36fad --- /dev/null +++ b/day22.py @@ -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)