This commit is contained in:
Adam Jeniski 2025-12-07 20:22:59 -10:00
parent 4e548d4d40
commit 4c101f2afa

58
2025/src/day08.clj Normal file
View File

@ -0,0 +1,58 @@
(ns day08
(:require input-manager clojure.set
[clojure.string :as str]))
(def input (->> (input-manager/get-input 2025 8)
(mapv (comp (partial mapv parse-long)
(partial re-seq #"\d+")))))
(def circuits (into #{} (map hash-set input)))
(defn square [x] (* x x))
(defn dist-squared [[ax ay az] [bx by bz]]
(+ (square (- ax bx))
(square (- ay by))
(square (- az bz))))
(def closest-points
(->> (for [a input
b input
:when (not= a b)]
#{a b})
distinct
(map vec)
(sort-by (partial apply dist-squared))))
(->> closest-points
(take (count input))
(reduce (fn [circuits [a b]]
(let [circuit-a (first (filter #(% a) circuits))
circuit-b (first (filter #(% b) circuits))]
(if (= circuit-a circuit-b)
circuits
(let [combined (clojure.set/union circuit-a circuit-b)]
(-> circuits
(disj circuit-a)
(disj circuit-b)
(conj combined))))))
circuits)
(sort-by count)
(take-last 3)
(map count)
(apply *))
(->> (loop [circuits circuits
[[a b] & rst] (take 10000 closest-points)]
(let [circuit-a (first (filter #(% a) circuits))
circuit-b (first (filter #(% b) circuits))]
(if (= circuit-a circuit-b)
(recur circuits rst)
(let [combined (clojure.set/union circuit-a circuit-b)
circuits' (-> circuits
(disj circuit-a)
(disj circuit-b)
(conj combined))]
(if (= 1 (count circuits'))
[a b]
(recur circuits' rst))))))
(map first)
(apply *))