41 lines
946 B
Python
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")
|