do 2017 day 8
This commit is contained in:
@@ -0,0 +1,46 @@
|
|||||||
|
(ns day08
|
||||||
|
(:require
|
||||||
|
[clojure.string :as str]
|
||||||
|
[core]
|
||||||
|
[input-manager]))
|
||||||
|
|
||||||
|
(def op {"inc" +
|
||||||
|
"dec" -})
|
||||||
|
(def cond-op {"<" <
|
||||||
|
"<=" <=
|
||||||
|
">" >
|
||||||
|
">=" >=
|
||||||
|
"==" =
|
||||||
|
"!=" not=})
|
||||||
|
(def input (map (comp
|
||||||
|
(fn [[name operation num _ cond-name cond-operation cond-val]]
|
||||||
|
[name
|
||||||
|
(op operation)
|
||||||
|
(parse-long num)
|
||||||
|
cond-name
|
||||||
|
(cond-op cond-operation)
|
||||||
|
(parse-long cond-val)])
|
||||||
|
core/split-whitespace)
|
||||||
|
(input-manager/get-input 2017 8)))
|
||||||
|
|
||||||
|
(defn compute [acc [reg reg-op val cond-reg cond-op cond-val]]
|
||||||
|
(if (cond-op (acc cond-reg 0) cond-val)
|
||||||
|
(assoc acc reg (reg-op (acc reg 0) val))
|
||||||
|
acc))
|
||||||
|
|
||||||
|
;; part 1
|
||||||
|
(->> input
|
||||||
|
(reduce compute {})
|
||||||
|
(sort-by second)
|
||||||
|
last
|
||||||
|
second)
|
||||||
|
|
||||||
|
;; part 2
|
||||||
|
(->> input
|
||||||
|
(reductions compute {})
|
||||||
|
(mapcat identity)
|
||||||
|
set
|
||||||
|
(sort-by second)
|
||||||
|
last
|
||||||
|
second)
|
||||||
|
|
||||||
Reference in New Issue
Block a user