This commit is contained in:
Adam Jeniski 2025-12-08 14:00:26 -10:00
parent e0fba7c72f
commit da7b893c37

View File

@ -11,17 +11,17 @@
(+ (square (- ax bx)) (+ (square (- ax bx))
(square (- ay by)) (square (- ay by))
(square (- az bz)))) (square (- az bz))))
(def closest-points (def closest-points (->> (for [a input
(->> (for [a input b input
b input :when (not= a b)]
:when (not= a b)] #{a b})
#{a b}) distinct
distinct (map vec)
(map vec) (sort-by (partial apply dist-squared))))
(sort-by (partial apply dist-squared))))
;; part 1
(->> closest-points (->> closest-points
(take (count input)) (take 1000)
(reduce (fn [circuits [a b]] (reduce (fn [circuits [a b]]
(let [circuit-a (first (filter #(% a) circuits)) (let [circuit-a (first (filter #(% a) circuits))
circuit-b (first (filter #(% b) circuits))] circuit-b (first (filter #(% b) circuits))]
@ -38,20 +38,19 @@
(map count) (map count)
(apply *)) (apply *))
(->> (loop [circuits circuits ;; part 2
[[a b] & rst] (take 10000 closest-points)] (->> (take 6498 closest-points)
(let [circuit-a (first (filter #(% a) circuits)) (reduce (fn [circuits [a b]]
circuit-b (first (filter #(% b) circuits))] (let [circuit-a (first (filter #(% a) circuits))
(if (= circuit-a circuit-b) circuit-b (first (filter #(% b) circuits))]
(recur circuits rst) (if (= circuit-a circuit-b)
(let [combined (clojure.set/union circuit-a circuit-b) circuits
circuits' (-> circuits (let [combined (clojure.set/union circuit-a circuit-b)
(disj circuit-a) circuits' (-> circuits (disj circuit-a) (disj circuit-b) (conj combined))]
(disj circuit-b) (if (= 1 (count circuits'))
(conj combined))] (reduced [a b])
(if (= 1 (count circuits')) circuits')))))
[a b] circuits)
(recur circuits' rst))))))
(map first) (map first)
(apply *)) (apply *))