diff --git a/2017/src/day12.clj b/2017/src/day12.clj new file mode 100644 index 0000000..8718bda --- /dev/null +++ b/2017/src/day12.clj @@ -0,0 +1,34 @@ +(ns day12 + (:require + [clojure.string :as str] + core + input-manager + [clojure.set :refer [difference]])) + +(def input (->> (input-manager/get-input 2017 12) + (map #(str/replace % #"," "")) + (map core/split-whitespace) + (map (fn [[a _ & rst]] + [(parse-long a) (mapv parse-long rst)])) + (into {}))) + +(defn group-from-start [start] + (loop [visited #{} + queue [start]] + (if-not (seq queue) + visited + (let [[curr & rst] queue + ns (filter (complement visited) (input curr))] + (recur (into visited ns) + (concat rst ns)))))) + +;; part one +(count (group-from-start 0)) + +;; part two +(loop [ks (into #{} (keys input)) + i 0] + (if-not (seq ks) + i + (recur (difference ks (group-from-start (first ks))) + (inc i))))