mirror of
https://github.com/Ajetski/advent-of-code.git
synced 2025-09-30 09:23:17 -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