blob: 45bba950962905f530299e677e7610c3725c98fd (
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
65
66
67
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)))))
|