37 lines
808 B
Clojure

(ns day3
(:require [helpers :refer :all]))
(def input (get-input 3))
(defn mul [instr]
(->>
instr
(re-seq #"\d+")
(map parse-long)
(apply *)))
(->> input
(re-seq #"mul\(\d+,\d+\)")
(map mul)
(reduce +)
(println "result:"))
(defn run2 [instructions]
(loop
[instructions
(re-seq #"(don't\(\))|(do\(\))|mul\(\d+,\d+\)" instructions)
do true
result 0]
(if (empty? instructions)
result
(let [instr (first (first instructions))]
(case instr
"do()" (recur (rest instructions) true result)
"don't()" (recur (rest instructions) false result)
(recur (rest instructions)
do
(if do (+ result (mul instr)) result)))))))
(println "result (part 2):" (run2 input))