import aoc class Day01(aoc.Aoc[list[str]]): def __init__(self) -> None: super().__init__(2023, 1) def replace_digits(self, line: str) -> str: spelled_digits = [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", ] for i, digit in enumerate(spelled_digits): line = line.replace(digit, digit[0] + str(i) + digit[-1]) return line def filter_digits(self, line: str) -> int: digits = list(filter(lambda x: x in map(str, range(10)), line)) rdigits = list(filter(lambda x: x in map(str, range(10)), reversed(line))) return int(digits[0] + rdigits[0]) def parseinput1(self, inpt: str) -> list[str]: return inpt.splitlines() def part1(self, inpt: list[str]) -> int: return sum(map(self.filter_digits, inpt)) def parseinput2(self, inpt: str) -> list[str]: return [self.replace_digits(line) for line in inpt.splitlines()] def main() -> None: day1 = Day01() day1.run() if __name__ == "__main__": main()