def is_invalid_id(num): num_str = str(num) num_len = len(num_str) for period in range(1, num_len): if num_len % period != 0: continue # Start with True, make False when it fails palin = True for idx in range(period, num_len, period): if num_str[:period] != num_str[idx:idx + period]: palin = False if palin: return True # No period has yielded repetition: return False if __name__ == "__main__": with open("input", "r") as fp: rangestrs = fp.read().split(",") ranges = [] for rangestr in rangestrs: a, b = rangestr.split("-") a_int, b_int = int(a), int(b) ranges.append((a, b)) assert a_int < b_int, f"Range invalid: {a} is not smaller than {b}" illegal_counter = 0 illegal_sum = 0 for a, b in ranges: a_int, b_int = int(a), int(b) for num in range(a_int, b_int + 1): if is_invalid_id(num): print(num, "is a palindrome thing") illegal_counter += 1 illegal_sum += num print(illegal_counter, illegal_sum)