49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
'''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'''
|
|
return re.fullmatch(r'(.*?)\1', id) is None
|
|
|
|
def check_extended_id(id: str) -> bool:
|
|
'''Checks for extended rule checking, at least two 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()
|