advent_of_code_2023/Day01/python/part2.py

53 lines
1.8 KiB
Python

def extract_digits(line):
"""Extracts all digits (as numbers) from the line in the order they appear."""
digit_map = {
"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4",
"five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"
}
# Add single digit mappings
digit_map.update({str(k): str(k) for k in range(10)})
digits_found = []
i = 0
while i < len(line):
matched = False
for word, digit in digit_map.items():
if line.startswith(word, i):
digits_found.append(int(digit))
i += len(word) - 1 # Advance the index
matched = True
break
i += 1 # Move to the next character if no match
return digits_found
def extract_calibration_value(line):
"""Extracts the calibration value from a line."""
digits = extract_digits(line)
if digits:
return int(str(digits[0]) + str(digits[-1]))
return 0
def sum_calibration_values(file_path):
"""Extracts calibration values from each line and sums them up."""
total_sum = 0
with open(file_path, 'r') as file:
for line in file:
calibration_value = extract_calibration_value(line.strip())
if calibration_value:
# Use the first and last found digit to form the calibration value
total_sum += calibration_value
print(f"Line: {line.strip()} - Calibration Value: {calibration_value}")
else:
print(f"Line: {line.strip()} - No digits found")
return total_sum
# Main execution
if __name__ == "__main__":
import sys
filename = sys.argv[1] if len(sys.argv) > 1 else "../input.txt"
total_calibration_value = sum_calibration_values(filename)
print(f"Total Sum of Calibration Values: {total_calibration_value}")