From a29e47b30f498f8ed6e8edc4b411e39e5e5aaf8d Mon Sep 17 00:00:00 2001 From: Adam Jeniski Date: Sat, 9 Dec 2023 08:50:09 -0500 Subject: [PATCH] do day 9 --- 2023/src/day09.clj | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 2023/src/day09.clj diff --git a/2023/src/day09.clj b/2023/src/day09.clj new file mode 100644 index 0000000..0e1d417 --- /dev/null +++ b/2023/src/day09.clj @@ -0,0 +1,37 @@ +(ns day09 + (:require [core :refer [get-puzzle-input]] + [clojure.string :as str])) + +(defn parse-line [line] + (->> (str/split line #" ") + (mapv #(Long/parseLong %)))) + +(defn generate-pyramid [nums] + (loop [pyramid [nums]] + (let [last-line (peek pyramid)] + (if (every? zero? last-line) + pyramid + (recur (conj pyramid + (mapv - (rest last-line) last-line))))))) + +(defn get-missing-num [nums reduction] + (let [pyrimid (generate-pyramid nums)] + (loop [acc 0 + line-idx (dec (count pyrimid))] + (if (< line-idx 0) + acc + (recur (reduction (get pyrimid line-idx) acc) + (dec line-idx)))))) + +(defn solve [reduction] + (->> (get-puzzle-input 9) + (mapv parse-line) + (mapv #(get-missing-num % reduction)) + (reduce +))) + +;; part 1 +(solve (fn [line num] (+ (peek line) num))) + +;; part 2 +(solve (fn [line num] (- (first line) num))) +