37 lines
808 B
Clojure
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))
|