generated from public/aoc_template
52 lines
1.2 KiB
Python
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)
|