| 123456789101112131415161718192021222324252627282930313233343536373839 |
- # encoding: utf-8
-
- # Given a list of comma-separated pairs of numbers separated by a dash
- # e.g. 111-999,22-33
- # find all the numbers that are some sequence of digits repeated twice
- import logging
-
- logger = logging.Logger(__name__)
- logger.addHandler(logging.StreamHandler())
- logger.setLevel(logging.DEBUG)
-
- def main():
- with open("day2_input.txt", "r") as f:
- input_line = f.readline().strip()
- inranges = [x.strip() for x in input_line.split(",")]
- num_ranges = len(inranges)
- tenths = num_ranges//10
- logger.debug(f"Received {num_ranges} ranges.")
- all_invalids = []
- for i, r in enumerate(inranges):
- if tenths and i % tenths == 0:
- logger.debug(f"Processing range {i}.")
- x, y = [int(q) for q in r.strip().split("-")]
- invalids = []
- for k in range(x,y+1):
- s_k = str(k)
- l = len(s_k)
- m = l//2
- if l % 2 == 0:
- if s_k[:m] == s_k[m:]:
- logger.debug(f"Found a double: {k}")
- invalids.append(k)
- all_invalids.extend(invalids)
-
- logger.info(f"Found {len(all_invalids)} invalid IDs.")
- logger.info(f"Sum of invalid IDs is {sum(all_invalids)}.")
-
- if __name__ == "__main__":
- main()
|