aboutsummaryrefslogtreecommitdiffstats
path: root/AoC2022/aocclj/src
diff options
context:
space:
mode:
Diffstat (limited to 'AoC2022/aocclj/src')
-rw-r--r--AoC2022/aocclj/src/aocclj/day02.clj46
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))