Solve 2024:22 p1-2 "Monkey Market"
Part 1 was relatively easy, 2 was harder. > So, by asking the monkey to sell the *first time* > each buyer's prices go down 2, then up 1, then > down 1, then up 3, you would get 23 (7 + 7 + 9) > bananas! Emphazis mine. Earlier versions of the code missed this fact, and added all occourences of the sequence. providing a answer that is too high.
This commit is contained in:
parent
0500ac41ab
commit
096c3d3e5d
1 changed files with 44 additions and 0 deletions
44
2024-python/output/day_22.py
Normal file
44
2024-python/output/day_22.py
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
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)
|
||||||
Loading…
Add table
Reference in a new issue