35 lines
1 KiB
Python
35 lines
1 KiB
Python
from itertools import combinations
|
|
|
|
from solutions import BaseSolution
|
|
|
|
|
|
class Solution(BaseSolution):
|
|
input_file = "09.txt"
|
|
|
|
def __str__(self):
|
|
return "Day 9: Encoding Error"
|
|
|
|
def parse_input(self, data):
|
|
return [*map(int, data.split())]
|
|
|
|
def solve(self, puzzle_input, preamble=25):
|
|
return self.first_invalid_number(puzzle_input, preamble)
|
|
|
|
def solve_again(self, data, preamble=25):
|
|
fin = self.solve(data, preamble)
|
|
pos = data.index(fin)
|
|
previous = [*filter(lambda n: n < fin, data[:pos])]
|
|
for r in range(2, len(previous) // 2):
|
|
for i in range(len(previous)):
|
|
if sum(data[i : i + r]) == fin:
|
|
return min(data[i : i + r]) + max(data[i : i + r])
|
|
|
|
def first_invalid_number(self, data, preamble=25):
|
|
for i, n in enumerate(data[preamble:]):
|
|
if not any(x + y == n for x, y in combinations(data[i : preamble + i], 2)):
|
|
return n
|
|
|
|
|
|
if __name__ == "__main__":
|
|
solution = Solution()
|
|
solution.show_results()
|