summaryrefslogtreecommitdiff
path: root/aoc_2022/day-02/sol.clj
blob: 99783ccabd0973519d9f474dbce825b63c43b0a7 (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
(require '[clojure.java.io])

(defn find-recurring-characters [strs]
  (reduce (fn [a x]
            (into #{} (filter #(contains? a %) x)))
          (into #{} (first strs))
          strs))

(defn get-priority [c]
  (if (>= c 97)
    (- c 96)
    (- c 38)))

(defn obtain-total-priorities [rucksacks]
  (reduce + (map (fn [line]
                   (let [half (/ (count line) 2)]
                     (get-priority (int
                                    (first (find-recurring-characters
                                            (list (subs line 0 half)
                                                  (subs line half))))))))
                 rucksacks)))

(defn obtain-total-priorities-2 [rucksacks]
  (reduce + (map (fn [lines]
                   (get-priority (int (first (find-recurring-characters lines)))))
                 (partition 3 rucksacks))))

(defn main []
  (with-open [rdr (clojure.java.io/reader "input")]
    (println (obtain-total-priorities (line-seq rdr))))
  (with-open [rdr (clojure.java.io/reader "input")]
    (println (obtain-total-priorities-2 (line-seq rdr))))
  (System/exit 0))
(main)