From 1cf8cf3f2182bb010b60f7c916fe2cd030df1658 Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Fri, 23 Dec 2022 22:01:57 +0100 Subject: Day 20 [WIP] --- day20/__init__.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 day20/__init__.py (limited to 'day20/__init__.py') diff --git a/day20/__init__.py b/day20/__init__.py new file mode 100644 index 0000000..02ff80d --- /dev/null +++ b/day20/__init__.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +from abc import ABC +from collections import OrderedDict +from typing import Iterator, List + +from aoc import BaseAssignment, I, T + + +class Assignment(BaseAssignment[int, int], ABC): + def parse_item(self, item: str) -> int: + return int(item) + + +class AssignmentOne(Assignment): + example_result = 3 + + @staticmethod + def move(items: List[int], item: int): + items = list(items) + input_size = len(items) + + index = items.index(item) + item = items.pop(index) + + new_index = (index + item) % input_size + + if item > 0 and index + item >= input_size: + new_index += 1 + + if item < 0 and index + item <= 0: + new_index -= 1 + + items.insert(new_index, item) + + return items + + def run(self, input: Iterator[I]) -> T: + input_list = list(input) + input_size = len(input_list) + working_list = list(input_list) + + for index, item in enumerate(input_list): + working_list = self.move(working_list, item) + + print( + working_list[1000 % input_size], + working_list[2000 % input_size], + working_list[3000 % input_size], + ) + + return sum( + [ + working_list[1000 % input_size], + working_list[2000 % input_size], + working_list[3000 % input_size], + ] + ) + + +class AssignmentTwo(Assignment): + pass -- cgit v1.2.3