2025-12-02 05:54:52 +00:00

41 lines
946 B
Python

def parse(s):
ret = []
for pair in s.split(','):
x,y = pair.split('-')
ret.append((int(x),int(y)))
return ret
def solve(input):
with open(input) as f:
ranges = parse(f.read())
t = 0
for lo,hi in ranges:
invalid = list(findinvalid(lo,hi))
if len(invalid) == 0:
print(lo,hi,invalid)
t += sum(invalid)
print(t)
def findinvalid(lo, hi):
assert len(str(hi)) - len(str(lo)) <= 1
assert lo <= hi
j = len(str(lo)) // 2
if j < 1:
# (1,19) => [11]
j = 1
for B in [10**j, 10**(j+1)]:
for i in range(lo//B, hi//B+1):
if i < B//10:
continue
if i >= B:
break
id = i*B + i
if lo <= id <= hi:
assert(str(i)+str(i) == str(id)), (i,id)
#print(lo, hi, i,B,id)
yield id
#solve("sample")
solve("input")