aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2022-12-02 16:59:12 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2022-12-03 15:50:58 +0200
commita9cfe1ddecbb711cd5b3bc9d544e77197869dcd9 (patch)
tree130c8d58923288f29766474140028a44fb1cb8a7 /src
Solve day01
Diffstat (limited to 'src')
-rw-r--r--src/aoc_2022/day01.clj34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/aoc_2022/day01.clj b/src/aoc_2022/day01.clj
new file mode 100644
index 0000000..c26c87c
--- /dev/null
+++ b/src/aoc_2022/day01.clj
@@ -0,0 +1,34 @@
+(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 (not (empty? row)) (Long/valueOf row) "")))
+ (split-by "" [])
+ (map (fn [calories] (reduce + calories)))
+ (reduce max)))
+
+(defn task2 [rows]
+ (->> rows
+ (map (fn [row] (if (not (empty? 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)]
+ (do
+ (println "task1:" (task1 rows))
+ (println "task2:" (task2 rows)))))