F = "input" data = open(F).read().strip().split(",") data = [(int(y[0]), int(y[1])) for x in data if (y := x.split("-"))] data = sorted(data) m = max(data, key=lambda x: x[1])[1] def part1(data): c = 0 for i in range(1, int("9" * (len(str(m)) // 2)) + 1): x = int(str(i) * 2) for a, b in data: if x in range(a, b + 1): c += x return c def part2(data): nums = [] for i in range(2, len(str(m)) + 1): j = 1 n = int(str(j) * i) while n <= m: nums.append(n) j += 1 n = int(str(j) * i) nums = sorted(nums) i = 0 c = set() for n in nums: while n > data[i][1]: i += 1 j = i while j < len(data) and n <= data[j][1]: if data[j][0] <= n <= data[j][1]: c.add(n) j += 1 return sum(c) print(part1(data)) print(part2(data))