This commit is contained in:
Stefan Harmuth 2024-12-30 08:22:39 +01:00
parent 5b317570bb
commit 6633a11e9d
3 changed files with 61 additions and 0 deletions

59
day14.py Normal file
View File

@ -0,0 +1,59 @@
import hashlib
from tools.aoc import AOCDay
from typing import Any
class Day(AOCDay):
inputs = [
[
(22728, "input14_test"),
(23890, "input14"),
],
[
(22696, "input14"),
],
]
def get_hash(self, to_hash: str, p2: bool = False) -> str:
if to_hash in self.DP:
return self.DP[to_hash]
the_hash = hashlib.md5(to_hash.encode()).hexdigest()
if p2:
for _ in range(2016):
the_hash = hashlib.md5(the_hash.encode()).hexdigest()
self.DP[to_hash] = the_hash
return the_hash
def get_key_index(self, p2: bool = False) -> int:
salt = self.getInput()
index = -1
key_count = 0
while key_count < 64:
index += 1
the_hash = self.get_hash(salt + str(index), p2)
for i in range(len(the_hash) - 2):
found_triplet = False
if the_hash[i] == the_hash[i + 1] == the_hash[i + 2]:
found_triplet = True
for t in range(index + 1, index + 1001):
if the_hash[i] * 5 in self.get_hash(salt + str(t), p2):
key_count += 1
break
if found_triplet:
break
return index
def part1(self) -> Any:
return self.get_key_index()
def part2(self) -> Any:
return self.get_key_index(True)
if __name__ == "__main__":
day = Day(2016, 14)
day.run(verbose=True)

1
inputs/input14 Normal file
View File

@ -0,0 +1 @@
ahsbgdzn

1
inputs/input14_test Normal file
View File

@ -0,0 +1 @@
abc