aboutsummaryrefslogtreecommitdiffstats
path: root/src/aoc_2022/day02.clj
blob: 25573fd4bad965e4174c323b4d45b0927a37f7a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
(ns aoc-2022.day02)
(require '[clojure.java.io :as io])
(require '[aoc-2022.utils :refer :all])

(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})

(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)]
    (println "task1:" (task1 rows))
    (println "task2:" (task2 rows))))