36 lines
771 B
Python
36 lines
771 B
Python
|
import re
|
||
|
|
||
|
start = 134792
|
||
|
end = 675810
|
||
|
|
||
|
|
||
|
def satisfies(x):
|
||
|
x = str(x)
|
||
|
result = False
|
||
|
double, not_decreasing = False, False
|
||
|
|
||
|
# double and *only* double exists
|
||
|
for i in range(len(x) - 1):
|
||
|
# double and left-of-a is BOL or !x
|
||
|
# and right-of-b is EOL or !x
|
||
|
a, b = x[i], x[i + 1]
|
||
|
bol = i - 1 < 0
|
||
|
eol = i + 2 >= len(x)
|
||
|
if a == b and (bol or x[i - 1] != a) and (eol or x[i + 2] != a):
|
||
|
double = True
|
||
|
break
|
||
|
|
||
|
# not_decreasing
|
||
|
prev = int(x[0])
|
||
|
for a in x[1:]:
|
||
|
a = int(a)
|
||
|
if prev > a:
|
||
|
return False
|
||
|
prev = a
|
||
|
not_decreasing = True
|
||
|
|
||
|
return double and not_decreasing
|
||
|
|
||
|
|
||
|
print(len([x for x in range(start, end + 1) if satisfies(x)]))
|