aboutsummaryrefslogtreecommitdiffstats
path: root/src/aoc_2022/day01.clj
blob: 2bced4b32358511925b8454d72d5e87ca7a05bcb (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
(ns aoc-2022.day01)
(require '[clojure.java.io :as io])

(defn split-by [delim acc coll]
  (let [head (first coll)
        tail (rest coll)]
    (if (nil? head)
      [acc]
      (cond
        (= delim head) (cons (reverse acc) (split-by delim [] tail))
        :else (split-by delim (cons head acc) tail)))))

(defn task1 [rows]
  (->> rows
       (map (fn [row] (if (seq row) (Long/valueOf row) "")))
       (split-by "" [])
       (map (fn [calories] (reduce + calories)))
       (reduce max)))

(defn task2 [rows]
  (->> rows
       (map (fn [row] (if (seq row) (Long/valueOf row) "")))
       (split-by "" [])
       (map (fn [calories] (reduce + calories)))
       sort
       reverse
       (take 3)
       (reduce +)))

(with-open [rdr (io/reader "resources/day01_actual.txt")]
  (let [rows (line-seq rdr)]
    (println "task1:" (task1 rows))
    (println "task2:" (task2 rows))))