day22 - snail-ish

This commit is contained in:
Stefan Harmuth 2024-12-22 10:22:14 +01:00
parent fc80c822a2
commit a0ff8eb0b9
4 changed files with 1855 additions and 0 deletions

60
day22.py Normal file
View File

@ -0,0 +1,60 @@
from collections import defaultdict
from tools.aoc import AOCDay
from typing import Any
def get_next_secret(secret: int, steps: int = 1) -> int:
for _ in range(steps):
new_secret = secret * 64
secret = (secret ^ new_secret) % 16777216
new_secret = secret // 32
secret = (secret ^ new_secret) % 16777216
new_secret = secret * 2048
secret = (secret ^ new_secret) % 16777216
return secret
class Day(AOCDay):
inputs = [
[
(37327623, "input22_test"),
(14869099597, "input22"),
],
[
(23, "input22_test2"),
(1717, "input22"),
],
]
def parse_input(self) -> list[int]:
return self.getInput(return_type=int)
def part1(self) -> Any:
return sum(get_next_secret(x, 2000) for x in self.parse_input())
def part2(self) -> Any:
sequences = defaultdict(int)
max_bananas = 0
for secret in self.parse_input():
sequence = (-10, -10, -10, -10)
seen = set()
for i in range(2000):
next_secret = get_next_secret(secret)
price = next_secret % 10
diff = price - secret % 10
secret = next_secret
sequence = sequence[-3:] + (diff,)
if sequence in seen or i < 4:
continue
seen.add(sequence)
sequences[sequence] += price
if sequences[sequence] > max_bananas:
max_bananas = sequences[sequence]
return max_bananas
if __name__ == "__main__":
day = Day(2024, 22)
day.run(verbose=True)

1787
inputs/input22 Normal file

File diff suppressed because it is too large Load Diff

4
inputs/input22_test Normal file
View File

@ -0,0 +1,4 @@
1
10
100
2024

4
inputs/input22_test2 Normal file
View File

@ -0,0 +1,4 @@
1
2
3
2024