51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
import aoc
|
|
|
|
|
|
def rstr(i: str) -> str:
|
|
return "".join(reversed(i))
|
|
|
|
|
|
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()
|