(require '[clojure.string :as str]) (def input (->> (slurp "./in") (str/split-lines) (map (fn [line] [(if (str/starts-with? line "on") true false) (->> (str/split line #"[^-\d]+") (rest) (map #(Integer/parseInt %)) (partition 2))])))) (println (frequencies (vals (reduce (fn [cmap c] (into cmap (let [[xx yy zz] (second c)] (for [x (range (max -50 (first xx)) (inc (min 50 (second xx)))) y (range (max -50 (first yy)) (inc (min 50 (second yy)))) z (range (max -50 (first zz)) (inc (min 50 (second zz))))] [[x y z] (first c)])))) {} input))))