From 8d43e37df99f280377bed90284d6ac2428334804 Mon Sep 17 00:00:00 2001
From: Clyne Sullivan <clyne@bitgloo.com>
Date: Wed, 30 Nov 2022 19:55:31 -0500
Subject: move 2021 days to folder; update README

---
 year2021/day11/part2.clj | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 year2021/day11/part2.clj

(limited to 'year2021/day11/part2.clj')

diff --git a/year2021/day11/part2.clj b/year2021/day11/part2.clj
new file mode 100644
index 0000000..4c4663c
--- /dev/null
+++ b/year2021/day11/part2.clj
@@ -0,0 +1,42 @@
+(defn get-adj [in y x]
+  (filter
+    #(some? (get-in in %))
+    [[(dec y) (dec x)] [(dec y) x] [(dec y) (inc x)]
+     [y (dec x)] [y (inc x)]
+     [(inc y) (dec x)] [(inc y) x] [(inc y) (inc x)]]
+    ))
+
+(defn apply-incs [in] (mapv (partial mapv inc) in))
+
+(defn next-step [indata]
+  (loop [in (apply-incs (indata :grid)) bl (indata :blinks) y 0 x 0]
+    (cond
+      (> (get-in in [y x]) 9)
+      (do
+        (recur
+          (-> (reduce
+                (fn [i n] (update-in i n #(cond-> % (pos? %) inc)))
+                in
+                (get-adj in y x))
+              (update-in [y x] #(do % 0)))
+          (inc bl)
+          0 0))
+      (< x (dec (count (first in))))
+      (recur in bl y (inc x))
+      (< y (dec (count in)))
+      (recur in bl (inc y) 0)
+      :else
+      {:grid in :blinks bl}
+      )
+    )
+  )
+
+(->> (slurp "./in")
+     (clojure.string/split-lines)
+     (map (partial map #(- (int %) 48)))
+     (assoc {} :blinks 0 :grid)
+     (iterate next-step)
+     (take-while #(pos? (apply + (flatten (% :grid)))))
+     (count)
+     (println))
+
-- 
cgit v1.2.3