59 lines
885 B
Clojure
59 lines
885 B
Clojure
(ns day02
|
|
(:require
|
|
[clojure.string :as str]))
|
|
|
|
;; A, X - 1 Rock
|
|
;; B, Y - 2 Paper
|
|
;; C, Z - 3 Scissors
|
|
;;
|
|
;; Lose - 0
|
|
;; Draw - 3
|
|
;; Win - 6
|
|
(def score-table
|
|
{"B X" 1
|
|
"C Y" 2
|
|
"A Z" 3
|
|
"A X" 4
|
|
"B Y" 5
|
|
"C Z" 6
|
|
"C X" 7
|
|
"A Y" 8
|
|
"B Z" 9})
|
|
|
|
(defn part1 [games]
|
|
(->> games
|
|
(map score-table)
|
|
(apply +)))
|
|
|
|
;; X lose
|
|
;; Y draw
|
|
;; Z win
|
|
(def part2-map
|
|
{"A X" "A Z"
|
|
"A Y" "A X"
|
|
"A Z" "A Y"
|
|
"B X" "B X"
|
|
"B Y" "B Y"
|
|
"B Z" "B Z"
|
|
"C X" "C Y"
|
|
"C Y" "C Z"
|
|
"C Z" "C X"})
|
|
|
|
(defn part2 [games]
|
|
(->> games
|
|
(map part2-map)
|
|
part1))
|
|
|
|
(comment
|
|
(def input (str/split-lines (slurp "example")))
|
|
|
|
(= 15 (part1 input))
|
|
(= 12 (part2 input))
|
|
)
|
|
|
|
(defn main [& _args]
|
|
(let [input (str/split-lines (slurp "input"))]
|
|
(do
|
|
(println (str "Part 1: " (part1 input)))
|
|
(println (str "Part 2: " (part2 input))))))
|