import re NUMBERS = re.compile(r"([0-9]|zero|one|two|three|four|five|six|seven|eight|nine)") NUMBERS_MAP = dict( zip( list(map(str, range(0, 10))) + [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", ], list(range(0, 10)) + list(range(0, 10)), ) ) def process_line(line): first = None match = re.search(NUMBERS, line) while match: line = line[(match.start() + 1) :] if not first: first = NUMBERS_MAP[match.group(1)] last = NUMBERS_MAP[match.group(1)] match = re.search(NUMBERS, line) return 10 * first + last with open("day01/data/input200.txt") as infile: result = sum(map(process_line, infile)) print(result) print(result == 281) with open("day01/data/input201.txt") as infile: result = sum(map(process_line, infile)) print(result) print(result == 54094)