generated from public/aoc_template
day22 - snail-ish
This commit is contained in:
parent
fc80c822a2
commit
a0ff8eb0b9
60
day22.py
Normal file
60
day22.py
Normal 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
1787
inputs/input22
Normal file
File diff suppressed because it is too large
Load Diff
4
inputs/input22_test
Normal file
4
inputs/input22_test
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
1
|
||||||
|
10
|
||||||
|
100
|
||||||
|
2024
|
||||||
4
inputs/input22_test2
Normal file
4
inputs/input22_test2
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
2024
|
||||||
Loading…
Reference in New Issue
Block a user