Files
adventofcode/2025/02/part2.py
Kees van Kempen 06d839fe7e 2025(03): make code a bit better
And clean up part 2 of day 2, add testinput for day 1.
2025-12-03 09:03:02 +01:00

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)