mirror of
https://github.com/Ajetski/advent-of-code.git
synced 2025-09-30 07:03:19 -09:00
do day 9
This commit is contained in:
parent
4018ae20dd
commit
a29e47b30f
37
2023/src/day09.clj
Normal file
37
2023/src/day09.clj
Normal file
@ -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)))
|
||||
|
Loading…
x
Reference in New Issue
Block a user