summaryrefslogtreecommitdiffstats
path: root/day20
diff options
context:
space:
mode:
Diffstat (limited to 'day20')
-rw-r--r--day20/__init__.py21
-rw-r--r--day20/test_init.py8
2 files changed, 19 insertions, 10 deletions
diff --git a/day20/__init__.py b/day20/__init__.py
index 02ff80d..a61253f 100644
--- a/day20/__init__.py
+++ b/day20/__init__.py
@@ -30,29 +30,30 @@ class AssignmentOne(Assignment):
30 if item < 0 and index + item <= 0: 30 if item < 0 and index + item <= 0:
31 new_index -= 1 31 new_index -= 1
32 32
33 if new_index == -1:
34 new_index = len(items)
35
33 items.insert(new_index, item) 36 items.insert(new_index, item)
34 37
35 return items 38 return items
36 39
40 @staticmethod
41 def get_nth_number_after_0(items: List[int], n: int):
42 index_of_0 = items.index(0)
43 return items[(index_of_0 + n) % len(items)]
44
37 def run(self, input: Iterator[I]) -> T: 45 def run(self, input: Iterator[I]) -> T:
38 input_list = list(input) 46 input_list = list(input)
39 input_size = len(input_list)
40 working_list = list(input_list) 47 working_list = list(input_list)
41 48
42 for index, item in enumerate(input_list): 49 for index, item in enumerate(input_list):
43 working_list = self.move(working_list, item) 50 working_list = self.move(working_list, item)
44 51
45 print(
46 working_list[1000 % input_size],
47 working_list[2000 % input_size],
48 working_list[3000 % input_size],
49 )
50
51 return sum( 52 return sum(
52 [ 53 [
53 working_list[1000 % input_size], 54 self.get_nth_number_after_0(working_list, 1000),
54 working_list[2000 % input_size], 55 self.get_nth_number_after_0(working_list, 2000),
55 working_list[3000 % input_size], 56 self.get_nth_number_after_0(working_list, 3000),
56 ] 57 ]
57 ) 58 )
58 59
diff --git a/day20/test_init.py b/day20/test_init.py
index b3ccc44..24b94cb 100644
--- a/day20/test_init.py
+++ b/day20/test_init.py
@@ -25,3 +25,11 @@ def test_rotation():
25 25
26 items = AssignmentOne.move(items, 4) 26 items = AssignmentOne.move(items, 4)
27 assert items == [1, 2, -3, 4, 0, 3, -2] 27 assert items == [1, 2, -3, 4, 0, 3, -2]
28
29
30def test_get_nth_number_after_0():
31 items = [1, 2, -3, 4, 0, 3, -2]
32
33 assert AssignmentOne.get_nth_number_after_0(items, 1000) == 4
34 assert AssignmentOne.get_nth_number_after_0(items, 2000) == -3
35 assert AssignmentOne.get_nth_number_after_0(items, 3000) == 2