258 tokens in Kotlin for part 2 by Vadzim Kapichenka
Download solution
funmain(){
dataclassVector(valx:Long,valy:Long,valz:Long)
println(
generateSequence(::readLine)
.map{it.split(",").map(String::toLong).run{Vector(get(0),get(1),get(2))}}.toList().run{
asSequence().flatMapIndexed{i,a->drop(i+1).map{atoit}}
.sortedBy{(a,b)->Vector(a.x-b.x,a.y-b.y,a.z-b.z).run{x*x+y*y+z*z}}
.runningFold(get(0)toget(0)towithIndex().associate{it.valuetoit.index}){(_,circuits),(a,b)->
atobtocircuits+circuits.filterValues{it==circuits[b]}.mapValues{circuits[a]!!}
}.dropWhile{it.second.values.toSet().size>1}.first().first.run{first.x*second.x}
}
)
}