From d1bbbd066202b7e8a6ef75ef961de20ef4331a40 Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Sun, 3 Dec 2023 13:46:27 +0100 Subject: WIP --- day1/__init__.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 day1/__init__.py (limited to 'day1/__init__.py') diff --git a/day1/__init__.py b/day1/__init__.py new file mode 100644 index 0000000..ee66fd3 --- /dev/null +++ b/day1/__init__.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +from abc import ABC +from enum import Enum +from typing import Iterator + +from aoc import BaseAssignment, I, T + + +class Assignment(BaseAssignment, ABC): + def run(self, input: Iterator[list[int]]) -> int: + input = list(input) + print(input) + return sum([ + int(f'{item[0]}{item[-1]}') + for item in input + ]) + + +class AssignmentOne(Assignment): + example_result = 142 + + def parse_item(self, item: str) -> list[int]: + return [int(i) for i in item if i.isdigit()] + + +class AssignmentTwo(Assignment): + example_result = 281 + + class Numbers(Enum): + one = 1 + two = 2 + three = 3 + four = 4 + five = 5 + six = 6 + seven = 7 + eight = 8 + nine = 9 + + @staticmethod + def _parse_item(item: str): + numbers = { + index: number + for index, number in [ + (item.find(number.name), number.value) + for number in AssignmentTwo.Numbers + ] + if index >= 0 + } + + for index, i in enumerate(item): + if i.isdigit(): + numbers[index] = int(i) + + return [ + value + for key, value + in sorted( + numbers.items(), + key=lambda item: item[0] + ) + ] + + def parse_item(self, item: str) -> list[int]: + return self._parse_item(item) + + + + + -- cgit v1.2.3