advent_of_code_2023/day_01/program.py

63 lines
1.5 KiB
Python
Executable file

#!/usr/bin/env python3
# https://adventofcode.com/2023/day/1
NUMBER_DICT = {
"one": "o1e",
"two": "t2o",
"three": "t3e",
"four": "4",
"five": "5e",
"six": "6",
"seven": "7n",
"eight": "e8t",
"nine": "n9e",
}
def get_lines(filename: str) -> list:
with open(filename, "r") as file:
return [line.strip() for line in file.readlines()]
def get_cal_val(line: str) -> int:
found_first = False
first = "0"
last = ""
for test_char in line:
if test_char.isdigit():
if found_first:
last = test_char
else:
first = test_char
last = first
found_first = True
return int(first + last)
def replace_digit_strings(line: str) -> str:
for digit in NUMBER_DICT.keys():
line = line.replace(digit, NUMBER_DICT[digit])
return line
def get_sum_cal_val(lines: list, spelled_out: bool) -> int:
sum_cal_val = 0
for line in lines:
if spelled_out:
sum_cal_val += get_cal_val(replace_digit_strings(line))
else:
sum_cal_val += get_cal_val(line)
return sum_cal_val
def main():
lines = get_lines("input.txt")
sum_cal_val = get_sum_cal_val(lines, False)
print(f"Part 1: The sum of all calibration values is: {sum_cal_val}")
sum_cal_val = get_sum_cal_val(lines, True)
print(f"Part 2: The sum of all calibration values is: {sum_cal_val}")
if __name__ == '__main__':
main()