36 lines
799 B
Python
36 lines
799 B
Python
|
|
import re
|
||
|
|
|
||
|
|
from output import ints
|
||
|
|
|
||
|
|
|
||
|
|
def solve(data):
|
||
|
|
p1 = set()
|
||
|
|
p2 = set()
|
||
|
|
R = re.compile(r"^(\w+)\1+$")
|
||
|
|
for line in data.split(","):
|
||
|
|
a, b = ints(line)
|
||
|
|
for n in range(a, b + 1):
|
||
|
|
s = str(n)
|
||
|
|
ls = len(s)
|
||
|
|
for seq in re.findall(R, s):
|
||
|
|
sqrts = [i for i in range(1, ls + 1) if ls % i == 0]
|
||
|
|
for t in sqrts:
|
||
|
|
if "".join([seq] * t) == s:
|
||
|
|
if t == 2:
|
||
|
|
p1.add(n)
|
||
|
|
p2.add(n)
|
||
|
|
return sum(p1), sum(p2)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
with open("./input/02.txt", "r") as f:
|
||
|
|
inp = f.read().strip()
|
||
|
|
|
||
|
|
p1, p2 = solve(inp)
|
||
|
|
|
||
|
|
print(p1)
|
||
|
|
print(p2)
|
||
|
|
|
||
|
|
assert p1 == 38437576669
|
||
|
|
assert p2 == 49046150754
|