diff options
Diffstat (limited to 'AoC2022/aocclj/src')
-rw-r--r-- | AoC2022/aocclj/src/aocclj/day02.clj | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/AoC2022/aocclj/src/aocclj/day02.clj b/AoC2022/aocclj/src/aocclj/day02.clj new file mode 100644 index 0000000..73099d8 --- /dev/null +++ b/AoC2022/aocclj/src/aocclj/day02.clj @@ -0,0 +1,46 @@ +(ns aocclj.day02 + (:require [clojure.set :as set] + [clojure.string :as str])) + +(def loses-to {:rock :scissors :scissors :paper :paper :rock}) +(def wins-to (set/map-invert loses-to)) + +(defn translate [play] + (case play + (A X) :rock + (B Y) :paper + (C Z) :scissors)) + +(defn weight [play] + (case play + :rock 1 + :paper 2 + :scissors 3)) + +(defn match [my other] + (cond + (= my (wins-to other)) 6 + (= my other) 3 + :else 0)) + +(defn static-play [my-instruction other] + (translate my-instruction)) + +(defn reactive-play [my-instruction other] + (case my-instruction + X (loses-to other) + Y other + Z (wins-to other))) + +(defn score [strategy game-play] + (let [[oponent my] game-play + oponent (translate oponent) + my-play (strategy my oponent)] + (+ (weight my-play) (match my-play oponent)))) + +(defn solver [strategy input] + (transduce + (comp + (map #(map symbol (str/split % #" "))) + (map (partial score strategy))) + + input)) |