-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday02.clj
More file actions
37 lines (27 loc) · 779 Bytes
/
day02.clj
File metadata and controls
37 lines (27 loc) · 779 Bytes
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
(ns day02
(:require [aoc-utils.core :as aoc]
[clojure.string :as str]))
(defn maximums [line]
(reduce
(fn [maximums cube]
(let [[amount color] (str/split cube #" ")]
(update maximums (keyword color) max (parse-long amount))))
{:red 0 :green 0 :blue 0}
(rest line)))
(defn valid? [{:keys [red green blue]}]
(and (<= red 12)
(<= green 13)
(<= blue 14)))
(defn find-valid [games]
(keep-indexed
(fn [idx game]
(when (valid? game) (inc idx)))
games))
(defn power [game]
(reduce * (vals game)))
(defn solve [input]
(let [lines (aoc/parse-lines input :words #": |; |, ")
games (map maximums lines)]
[(reduce + (find-valid games))
(aoc/sum-map power games)]))
(solve (aoc/read-input 2))