From 0a5c1f77d01fc0bd166494787f24562e2fd3a9e9 Mon Sep 17 00:00:00 2001 From: Botond Hende Date: Wed, 11 Dec 2024 10:18:23 +0100 Subject: renamed day folders to two digit format --- 2023/day01/solve2.py | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 2023/day01/solve2.py (limited to '2023/day01/solve2.py') diff --git a/2023/day01/solve2.py b/2023/day01/solve2.py new file mode 100644 index 0000000..e545cf3 --- /dev/null +++ b/2023/day01/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() -- cgit v1.2.3-70-g09d2