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