refactor day 03

This commit is contained in:
2026-05-13 07:39:51 -04:00
parent 0aed472a32
commit 505453974b
+19 -25
View File
@@ -1,37 +1,31 @@
(ns day03 (ns day03
(:require [core :as c] (:require [input-manager]
[input-manager :refer [get-input]]
[clojure.string :as str])) [clojure.string :as str]))
(def input (str/join (get-input 3))) (def input (input-manager/get-input-raw 2024 3))
(defn parse-muls (defn compute-muls [s]
"takes in a string containing mul instructions (map (comp #(reduce * %)
returns list of parsed integral multiplication results" #(map parse-long %)
[s] #(str/split % #",")
(->> (c/get-match-groups #"mul\((\d{1,3}),(\d{1,3})\)" s) #(subs % 4 (dec (count %)))) ;; remove `mul(` prefix and `)` suffix
(map #(map parse-long %)) s))
(map #(reduce * %))))
(defn enforce-toggles [[el & rst]]
(cond (= el "do()") (recur rst)
(= el "don't()") (recur (drop-while #(not= % "do()") rst))
el (cons el (lazy-seq (enforce-toggles rst)))))
;; part 1 ;; part 1
(->> input (->> input
parse-muls (re-seq #"mul\(\d{1,3},\d{1,3}\)")
compute-muls
(reduce +)) (reduce +))
;; part 2 ;; part 2
(->> input (->> input
(c/re-pos #"mul\((\d{1,3}),(\d{1,3})\)|(do\(\))|(don't\(\))") (re-seq #"mul\(\d{1,3},\d{1,3}\)|do\(\)|don't\(\)")
(sort-by key) enforce-toggles
(reduce compute-muls
(fn [acc [_idx instr]] (reduce +))
(cond
(.startsWith instr "mul") (if (:on acc)
(update acc :val
+ (->> instr parse-muls first))
acc)
(.startsWith instr "don't") (assoc acc :on false)
(.startsWith instr "do") (assoc acc :on true)))
{:on true
:val 0})
:val)