advent-of-code/2020-python/solutions/day_09.py
2021-11-01 16:45:03 +01:00

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()