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()