feat: add solution 2025/02
This commit is contained in:
1
data/example/2025/02.txt
Normal file
1
data/example/2025/02.txt
Normal file
@@ -0,0 +1 @@
|
||||
11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124
|
||||
79
src/solution/year_2025/day_02.py
Normal file
79
src/solution/year_2025/day_02.py
Normal file
@@ -0,0 +1,79 @@
|
||||
import math
|
||||
from typing import Any
|
||||
|
||||
|
||||
def _cut_right_n_digits(s: int, n: int) -> tuple[int, int]:
|
||||
left = s // 10**n
|
||||
right = s - left * 10**n
|
||||
return left, right
|
||||
|
||||
|
||||
def is_invalid(n: int) -> bool:
|
||||
size = int(math.log10(n)) + 1
|
||||
left, right = _cut_right_n_digits(n, size // 2)
|
||||
return left == right
|
||||
|
||||
|
||||
def is_invalid_any(n: int) -> bool:
|
||||
size = int(math.log10(n)) + 1
|
||||
|
||||
for cut in range(1, size):
|
||||
if size % cut != 0:
|
||||
continue
|
||||
|
||||
left, right = _cut_right_n_digits(n, cut)
|
||||
while left != 0:
|
||||
nleft, nright = _cut_right_n_digits(left, cut)
|
||||
if nright != right:
|
||||
break
|
||||
left = nleft
|
||||
|
||||
if left == 0:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def part_1(input_data: str) -> Any:
|
||||
s = 0
|
||||
for rng in input_data.split(","):
|
||||
a, b = (int(s) for s in rng.split("-"))
|
||||
s += sum([n for n in range(a, b + 1) if is_invalid(n)])
|
||||
|
||||
return s
|
||||
|
||||
|
||||
def part_2(input_data: str) -> Any:
|
||||
s = 0
|
||||
for rng in input_data.split(","):
|
||||
a, b = (int(s) for s in rng.split("-"))
|
||||
s += sum([n for n in range(a, b + 1) if is_invalid_any(n)])
|
||||
|
||||
return s
|
||||
|
||||
|
||||
def test_is_invalid():
|
||||
assert is_invalid(55)
|
||||
assert is_invalid(6464)
|
||||
assert is_invalid(123123)
|
||||
|
||||
assert not is_invalid(123124)
|
||||
assert not is_invalid(22222)
|
||||
|
||||
|
||||
def test_is_invalid_any():
|
||||
assert is_invalid_any(12341234)
|
||||
assert is_invalid_any(123123123)
|
||||
assert is_invalid_any(12121212)
|
||||
assert is_invalid_any(1111111)
|
||||
|
||||
assert not is_invalid_any(123124)
|
||||
assert not is_invalid_any(12312)
|
||||
|
||||
|
||||
def test_part_1(example_data):
|
||||
assert part_1(example_data) == 1227775554
|
||||
|
||||
|
||||
def test_part_2(example_data):
|
||||
assert part_2(example_data) == 4174379265
|
||||
Reference in New Issue
Block a user