71 lines
1.3 KiB
Python
71 lines
1.3 KiB
Python
from lib import get_data, str_to_ints
|
|
|
|
|
|
def in_range_1(x):
|
|
contains_double = False
|
|
s = str(x)
|
|
for i in range(len(s) - 1):
|
|
if s[i] == s[i + 1]:
|
|
contains_double = True
|
|
break
|
|
|
|
if not contains_double:
|
|
return False
|
|
|
|
for i in range(len(s) - 1):
|
|
if ord(s[i]) > ord(s[i + 1]):
|
|
return False
|
|
return True
|
|
|
|
|
|
def in_range_2(x):
|
|
contains_double = False
|
|
s = str(x)
|
|
for i in range(len(s) - 1):
|
|
if s[i] == s[i + 1]:
|
|
if i + 2 < len(s):
|
|
if s[i + 2] == s[i + 1]:
|
|
continue
|
|
if i - 1 >= 0:
|
|
if s[i - 1] == s[i]:
|
|
continue
|
|
contains_double = True
|
|
|
|
if not contains_double:
|
|
return False
|
|
|
|
for i in range(len(s) - 1):
|
|
if ord(s[i]) > ord(s[i + 1]):
|
|
return False
|
|
return True
|
|
|
|
|
|
def part_1(data):
|
|
a, b = str_to_ints(data)
|
|
b = -b
|
|
r = 0
|
|
for x in range(a, b + 1):
|
|
if in_range_1(x):
|
|
r += 1
|
|
print(r)
|
|
|
|
|
|
def part_2(data):
|
|
a, b = str_to_ints(data)
|
|
b = -b
|
|
r = 0
|
|
for x in range(a, b + 1):
|
|
if in_range_2(x):
|
|
r += 1
|
|
print(r)
|
|
|
|
|
|
def main():
|
|
data = get_data(__file__)
|
|
part_1(data)
|
|
part_2(data)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|