summaryrefslogtreecommitdiff
path: root/2023/day1/solve2.py
diff options
context:
space:
mode:
Diffstat (limited to '2023/day1/solve2.py')
-rw-r--r--2023/day1/solve2.py65
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()