aboutsummaryrefslogtreecommitdiffstats
path: root/src/aoc_2022/day02.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/aoc_2022/day02.clj')
-rw-r--r--src/aoc_2022/day02.clj68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/aoc_2022/day02.clj b/src/aoc_2022/day02.clj
new file mode 100644
index 0000000..45bba95
--- /dev/null
+++ b/src/aoc_2022/day02.clj
@@ -0,0 +1,68 @@
+(ns aoc-2022.day02)
+(require '[clojure.java.io :as io])
+(require '[aoc-2022.utils :as utils])
+
+(defn score-round-result [own opp]
+ (cond
+ (= own opp) 3
+ (and (= own :rock) (= opp :scissors)) 6
+ (and (= own :rock) (= opp :paper)) 0
+ (and (= own :paper) (= opp :scissors)) 0
+ (and (= own :paper) (= opp :rock)) 6
+ (and (= own :scissors) (= opp :paper)) 6
+ (and (= own :scissors) (= opp :rock)) 0))
+
+(def score-own-play
+ {:rock 1
+ :paper 2
+ :scissors 3})
+
+(defn score-round [own opp]
+ (+ (score-round-result own opp) (get score-own-play own)))
+
+(def plays
+ {\A :rock
+ \B :paper
+ \C :scissors
+ \X :rock
+ \Y :paper
+ \Z :scissors})
+
+(defn score-round [own opp]
+ (+ (score-round-result own opp) (score-own-play own)))
+
+(defn task1 [rows]
+ (->> rows
+ (map (fn [[opp _ own]] `(~(get plays own) ~(get plays opp))))
+ (map (fn [[own opp]] (score-round own opp)))
+ (reduce +)
+ ))
+
+(def results
+ {\X :lose
+ \Y :draw
+ \Z :win})
+
+(def own-play
+ {'(:lose :rock) :scissors
+ '(:lose :paper) :rock
+ '(:lose :scissors) :paper
+ '(:draw :rock) :rock
+ '(:draw :paper) :paper
+ '(:draw :scissors) :scissors
+ '(:win :rock) :paper
+ '(:win :paper) :scissors
+ '(:win :scissors) :rock})
+
+(defn task2 [rows]
+ (->> rows
+ (map (fn [[opp _ res]] `(~(get results res) ~(get plays opp))))
+ (map (fn [[res opp]] [(get own-play `(~res ~opp)) opp]))
+ (map (fn [[own opp]] (score-round own opp)))
+ (reduce +)))
+
+(with-open [rdr (io/reader "resources/day02_actual.txt")]
+ (let [rows (line-seq rdr)]
+ (do
+ (println "task1:" (task1 rows))
+ (println "task2:" (task2 rows)))))