diff options
Diffstat (limited to 'year2021/day11/part2.clj')
-rw-r--r-- | year2021/day11/part2.clj | 42 |
1 files changed, 42 insertions, 0 deletions
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)) + |