diff options
Diffstat (limited to '2023/day1/solve2.py')
-rw-r--r-- | 2023/day1/solve2.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/2023/day1/solve2.py b/2023/day1/solve2.py new file mode 100644 index 0000000..e545cf3 --- /dev/null +++ b/2023/day1/solve2.py @@ -0,0 +1,65 @@ +def main(): + final_value = 0 + text_digits = { + "one": "1", + "two": "2", + "three": "3", + "four": "4", + "five": "5", + "six": "6", + "seven": "7", + "eight": "8", + "nine": "9" + } + + with open("input", "r") as f: + for line in f: + line_strip = line.strip() + calibration_value = "" + + text_digit_pos_first = -1 + text_digit_value_first = None + for elem in text_digits.keys(): + pos = line_strip.find(elem) + if pos >= 0: + if text_digit_pos_first == -1 or pos < text_digit_pos_first: + text_digit_pos_first = pos + text_digit_value_first = text_digits[elem] + + text_digit_pos_last = -1 + text_digit_value_last = None + for elem in text_digits.keys(): + pos = line_strip.rfind(elem) + if pos >= 0: + if pos > text_digit_pos_last: + text_digit_pos_last = pos + text_digit_value_last = text_digits[elem] + + for index, char in enumerate(line_strip): + if text_digit_pos_first != -1 and index >= text_digit_pos_first: + calibration_value += text_digit_value_first + break + + if char.isdigit(): + calibration_value += char + break + + index = len(line_strip) + for char in reversed(line_strip): + index -= 1 + + if text_digit_pos_last != -1 and index <= text_digit_pos_last: + calibration_value += text_digit_value_last + break + + if char.isdigit(): + calibration_value += char + break + + final_value += int(calibration_value) + + print(final_value) + + +if __name__ == '__main__': + main() |