40 lines
992 B
Python
40 lines
992 B
Python
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)
|