USING: arrays assocs disjoint-sets kernel math math.combinatorics math.parser math.statistics math.vectors multiline peg.ebnf sets sequences sorting ; IN: 2025.08 EBNF: parse [=[ n = [0-9]+ => [[ dec> ]] line = n ","~ n ","~ n ]=] : connections ( boxes -- boxes connections ) dup 2 [ dup first2 v- l2-norm 2array ] map-combinations sort-values keys ; : part-1 ( boxes -- n ) connections 1000 head [ nip add-atoms ] [ nipd '[ _ equate ] assoc-each ] [ nip '[ _ representative ] map ] 3tri sorted-histogram values { 0 1 2 } kth-largests product ; : part-2 ( boxes -- n ) connections [ ] dip [ drop add-atoms ] 3keep [ first2 pick equate 2dup '[ _ representative ] map cardinality 1 = ] find 3nip first2 [ first ] bi@ * ;