from tools.aoc import AOCDay from typing import Any class Day(AOCDay): inputs = [ [ (114, "input9_test"), (1647269739, "input9"), ], [ (2, "input9_test"), (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)