From f315ef05c548da80410cb4f6665a9bba7a953f94 Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Tue, 2 Dec 2025 07:57:38 +0100 Subject: Day 1 and 2 --- day2/__init__.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 day2/__init__.py (limited to 'day2/__init__.py') diff --git a/day2/__init__.py b/day2/__init__.py new file mode 100644 index 0000000..882bcad --- /dev/null +++ b/day2/__init__.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +import re +from abc import ABC +from typing import Iterator + +from aoc import BaseAssignment, I, T + + +class Assignment(BaseAssignment, ABC): + def parse_item(self, item: str) -> Iterator[range]: + for r in item.split(","): + [start, end] = r.split("-") + yield range(int(start), int(end) + 1) + + def find_invalid_ids(self, item: range) -> Iterator[int]: + raise NotImplementedError() + + def run(self, input: Iterator[range]) -> int: + totals = 0 + for item in input: + totals += sum(self.find_invalid_ids(item)) + + return totals + + +class AssignmentOne(Assignment): + example_result = 1227775554 + + @classmethod + def find_invalid_ids(cls, item: range): + for i in item: + i_str = str(i) + if i_str[: len(i_str) // 2] == i_str[len(i_str) // 2 :]: + yield i + + +class AssignmentTwo(Assignment): + example_result = 4174379265 + + @classmethod + def is_invalid_id(cls, item: str) -> bool: + for i in range(1, (len(item) // 2) + 1): + pattern = item[:i] + rest = item[i:] + + if re.match(rf"({pattern})+$", rest): + return True + + return False + + @classmethod + def find_invalid_ids(cls, item: range): + for i in item: + i_str = str(i) + + if AssignmentTwo.is_invalid_id(i_str): + yield i -- cgit v1.2.3