'''AoC Day 2''' import re def part1(range_list: list) -> int: '''Part 1''' total = 0 for id_range in range_list: for x in range(int(id_range[0]), int(id_range[1]) + 1): if not check_valid_id(str(x)): total += x return total def part2(range_list: list) -> int: '''Part 2''' total = 0 for id_range in range_list: for x in range(int(id_range[0]), int(id_range[1]) + 1): if not check_extended_id(str(x)): total += x return total def check_valid_id(id: str) -> bool: '''Checks a given ID for validity using the silly rules, only one repeat''' return re.fullmatch(r'(.*?)\1', id) is None def check_extended_id(id: str) -> bool: '''Checks for extended rule checking, at least one repeats''' return re.fullmatch(r'(.*?)\1+', id) is None def main(): '''Entrypoint''' with open('input.txt', encoding='utf-8') as fh: range_list = [(y[0].strip(), y[1].strip()) for y in (x.split('-') for x in fh.readline().split(','))] total = part1(range_list) print(f'Part1: {total}') total2 = part2(range_list) print(f'Part2: {total2}') if __name__ == "__main__": main()