From 574d0888ccc1a27fb062ac5b09fcac4beb80e84e Mon Sep 17 00:00:00 2001 From: Adam Jeniski Date: Fri, 1 Dec 2023 01:13:26 -0500 Subject: [PATCH] clean up regex. compute not hardcode --- 2023/src/day01.clj | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/2023/src/day01.clj b/2023/src/day01.clj index 18a8452..521722a 100644 --- a/2023/src/day01.clj +++ b/2023/src/day01.clj @@ -6,14 +6,14 @@ (def input (get-puzzle-input 1)) (def numeric-value-map {"one" 1 - "two" 2 - "three" 3 - "four" 4 - "five" 5 - "six" 6 - "seven" 7 - "eight" 8 - "nine" 9}) + "two" 2 + "three" 3 + "four" 4 + "five" 5 + "six" 6 + "seven" 7 + "eight" 8 + "nine" 9}) (defn numeric-value [s] (or (numeric-value-map s) s)) @@ -28,10 +28,18 @@ (reduce +)) ;; part 2 +(def forawrd-search-regex (->> (conj (keys numeric-value-map) "\\d") + (string/join "|") + re-pattern)) + +(def backwards-search-regex (->> (conj (->> numeric-value-map keys (map string/reverse)) "\\d") + (string/join "|") + re-pattern)) + (->> input (map (fn [line] - (let [f (re-find #"one|two|three|four|five|six|seven|eight|nine|\d" line) - l (string/reverse (re-find #"eno|owt|eerht|ruof|evif|xis|neves|thgie|enin|\d" (string/reverse line)))] + (let [f (re-find forawrd-search-regex line) + l (string/reverse (re-find backwards-search-regex (string/reverse line)))] (str (numeric-value f) (numeric-value l))))) (map #(Integer/parseInt %)) (reduce +))