--- /dev/null
+(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))))
+
+++ /dev/null
-(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))))
-