summaryrefslogtreecommitdiffstats
path: root/day9/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'day9/__init__.py')
-rw-r--r--day9/__init__.py63
1 files changed, 0 insertions, 63 deletions
diff --git a/day9/__init__.py b/day9/__init__.py
deleted file mode 100644
index 0cf3770..0000000
--- a/day9/__init__.py
+++ /dev/null
@@ -1,63 +0,0 @@
1from typing import Any, Iterator, List
2
3from aoc import BaseAssignment
4
5
6class Assignment(BaseAssignment):
7 def __init__(self, path, preamble_length=25):
8 super().__init__(path)
9 self.preamble_length = int(preamble_length)
10
11 def read_input(self, example=False) -> List:
12 return list(super(Assignment, self).read_input(example))
13
14 def parse_item(self, item: str) -> Any:
15 return int(item)
16
17
18class AssignmentOne(Assignment):
19 def find_invalid(self, input: List, preamble_length: int = 25) -> int:
20 preamble = sorted(input[:preamble_length])
21 to_check = input[preamble_length]
22
23 front_position = 0
24 end_position = preamble_length - 1
25
26 while True:
27 if front_position is end_position:
28 return to_check
29
30 sum = preamble[front_position] + preamble[end_position]
31
32 if sum > to_check:
33 end_position -= 1
34 elif sum < to_check:
35 front_position += 1
36 else:
37 break
38
39 return self.find_invalid(input[1:], preamble_length=preamble_length)
40
41 def run(self, input: List) -> int:
42 return self.find_invalid(
43 input, preamble_length=int(self.preamble_length))
44
45
46class AssignmentTwo(AssignmentOne):
47 def find_weakness(self, input: List, invalid_nr: int) -> int:
48 for index, current_num in enumerate(input):
49 if index < 2:
50 continue
51
52 items_to_check = input[:index]
53 sum_list = sum(items_to_check)
54
55 if sum_list > invalid_nr:
56 break
57 elif sum_list == invalid_nr:
58 return min(items_to_check) + max(items_to_check)
59
60 return self.find_weakness(input[1:], invalid_nr)
61
62 def run(self, input: List) -> int:
63 return self.find_weakness(input, super().run(input))