aoc2023/day09.py

52 lines
1.2 KiB
Python

from tools.aoc import AOCDay
from typing import Any
class Day(AOCDay):
inputs = [
[
(114, "input9_test"),
(1684566095, "input9_dennis"),
(1647269739, "input9"),
],
[
(2, "input9_test"),
(1136, "input9_dennis"),
(864, "input9"),
],
]
def get_first_last(self) -> (int, int):
first_ans = 0
last_ans = 0
for seq in self.getInputAsArraySplit(split_char=" ", return_type=int):
s = [seq]
while set(s[-1]) != {0}:
new_seq = []
for i in range(1, len(s[-1])):
new_seq.append(s[-1][i] - s[-1][i - 1])
s.append(new_seq)
s = s[:-1]
last_num = 0
first_num = 0
for ns in reversed(s):
last_num = last_num + ns[-1]
first_num = ns[0] - first_num
first_ans += first_num
last_ans += last_num
return first_ans, last_ans
def part1(self) -> Any:
return self.get_first_last()[1]
def part2(self) -> Any:
return self.get_first_last()[0]
if __name__ == "__main__":
day = Day(2023, 9)
day.run(verbose=True)