(require '[clojure.string :as str]) (def bitcount 12) (def input (->> "./in" (slurp) (str/split-lines) (map #(Integer/parseInt % 2)) ) ) (defn countbit [lst bit] (->> lst (map #(if (bit-test % bit) 1 0)) (apply +) ) ) (defn filterbit [lst bit v] (if (= 1 (count lst)) lst (filter #(= (bit-test % bit) v) lst) ) ) (loop [bit (dec bitcount) lst0 input lst1 input] (if (and (= 1 (count lst0)) (= 1 (count lst1))) (println (map * lst0 lst1)) (recur (dec bit) (filterbit lst0 bit (>= (countbit lst0 bit) (/ (count lst0) 2))) (filterbit lst1 bit (< (countbit lst1 bit) (/ (count lst1) 2))) ) ) )