generated from public/aoc_template
day02 - revised
This commit is contained in:
parent
270e9dc482
commit
4f99603bd5
30
day02.py
30
day02.py
@ -1,6 +1,7 @@
|
||||
import math
|
||||
|
||||
from tools.aoc import AOCDay
|
||||
from tools.types import String
|
||||
from typing import Any
|
||||
|
||||
|
||||
@ -19,28 +20,27 @@ class Day(AOCDay):
|
||||
def parse_input(self) -> list[tuple[int, ...]]:
|
||||
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
|
||||
for low, high in self.parse_input():
|
||||
for _id in range(low, high + 1):
|
||||
str_id = str(_id)
|
||||
if str_id[:len(str_id) // 2] == str_id[len(str_id) // 2:]:
|
||||
ans += _id
|
||||
str_id = String(_id)
|
||||
if not part2:
|
||||
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
|
||||
|
||||
def part1(self) -> Any:
|
||||
return self.solve()
|
||||
|
||||
def part2(self) -> Any:
|
||||
ans = 0
|
||||
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
|
||||
return self.solve(part2=True)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Loading…
Reference in New Issue
Block a user