day02 - revised

This commit is contained in:
Stefan Harmuth 2025-12-02 09:31:29 +01:00
parent 270e9dc482
commit 4f99603bd5

View File

@ -1,6 +1,7 @@
import math import math
from tools.aoc import AOCDay from tools.aoc import AOCDay
from tools.types import String
from typing import Any from typing import Any
@ -19,28 +20,27 @@ class Day(AOCDay):
def parse_input(self) -> list[tuple[int, ...]]: def parse_input(self) -> list[tuple[int, ...]]:
return [tuple(map(int, pair.split("-"))) for pair in self.getInput().split(",")] return [tuple(map(int, pair.split("-"))) for pair in self.getInput().split(",")]
def part1(self) -> Any: def solve(self, part2: bool = False) -> int:
ans = 0 ans = 0
for low, high in self.parse_input(): for low, high in self.parse_input():
for _id in range(low, high + 1): for _id in range(low, high + 1):
str_id = str(_id) str_id = String(_id)
if str_id[:len(str_id) // 2] == str_id[len(str_id) // 2:]: if not part2:
ans += _id if len(set(str_id // 2)) == 1:
ans += _id
else:
for x in range(2, len(str_id) + 1):
if len(set(str_id // x)) == 1:
ans += _id
break
return ans return ans
def part1(self) -> Any:
return self.solve()
def part2(self) -> Any: def part2(self) -> Any:
ans = 0 return self.solve(part2=True)
for low, high in self.parse_input():
for _id in range(low, high + 1):
str_id = str(_id)
for x in range(1, len(str_id) // 2 + 1):
blocks = set(str_id[i:i+x] for i in range(0, len(str_id), x))
if len(blocks) == 1:
ans += _id
break
return ans
if __name__ == '__main__': if __name__ == '__main__':