]> code.bitgloo.com Git - clyne/advent-of-code.git/commitdiff
add day 20
authorClyne Sullivan <clyne@bitgloo.com>
Mon, 20 Dec 2021 13:02:13 +0000 (08:02 -0500)
committerClyne Sullivan <clyne@bitgloo.com>
Mon, 20 Dec 2021 13:02:13 +0000 (08:02 -0500)
partboth.clj [new file with mode: 0644]

diff --git a/partboth.clj b/partboth.clj
new file mode 100644 (file)
index 0000000..4e460ca
--- /dev/null
@@ -0,0 +1,44 @@
+(require '[clojure.string :as str])
+
+(defn pad-input-map [in-map pad-val]
+  (let [pad-row (repeat (+ 4 (count (first in-map))) pad-val)
+        pad-side (repeat 2 pad-val)]
+    (mapv vec
+      (concat
+        [pad-row pad-row]
+        (mapv #(concat pad-side % pad-side) in-map)
+        [pad-row pad-row]))))
+
+(defn get-number [in-map y x]
+  (concat (subvec (get in-map (dec y)) (dec x) (+ 2 x))
+          (subvec (get in-map y) (dec x) (+ 2 x))
+          (subvec (get in-map (inc y)) (dec x) (+ 2 x))))
+
+(defn get-new-pixel [enhance-algo in-map y x]
+  (->> (get-number in-map y x)
+       str/join
+       (#(Integer/parseInt % 2))
+       (get enhance-algo)
+       {\. 0 \# 1}))
+
+(defn build-output-number-map [enhance-algo in-map]
+  (let [pad-val (if (= \# (first enhance-algo)) (first (first in-map)) 0)
+        padded-in-map (pad-input-map in-map pad-val)]
+    (for [y (range 1 (dec (count padded-in-map)))]
+      (for [x (range 1 (dec (count (first padded-in-map))))]
+        (get-new-pixel enhance-algo padded-in-map y x)
+        ))))
+
+(defn count-lit-pixels [in-map]
+  ((frequencies (flatten in-map)) 1))
+
+(let [[enhance-algo in-map]
+      (->> (slurp "./in")
+           str/split-lines
+           ((juxt
+           first
+           (comp (partial mapv #(mapv {\. 0 \# 1} %))
+                 (partial drop 2)))))
+      image-output (iterate (partial build-output-number-map enhance-algo) in-map)]
+  (println (count-lit-pixels (nth image-output 50))))
+