@@ -7,9 +7,11 @@ object Day23 {
77 type Computer = String
88 type Edge = (Computer , Computer )
99
10- def find3Cliques (edges : Set [Edge ]): Set [ Set [Computer ]] = {
11- val neighbors = (edges ++ edges.map(_.swap)).groupMap(_._1)(_._2)
10+ def edges2neighbors (edges : Set [Edge ]): Map [ Computer , Set [Computer ]] =
11+ (edges ++ edges.map(_.swap)).groupMap(_._1)(_._2)
1212
13+ def find3Cliques (edges : Set [Edge ]): Set [Set [Computer ]] = {
14+ val neighbors = edges2neighbors(edges)
1315 for {
1416 (from, to) <- edges
1517 third <- neighbors(from) & neighbors(to)
@@ -18,15 +20,11 @@ object Day23 {
1820
1921 def count3CliquesT (edges : Set [Edge ]): Int = find3Cliques(edges).count(_.exists(_.startsWith(" t" )))
2022
21- def maximumClique (edges : Set [Edge ]): Set [Computer ] = {
22- val neighbors = (edges ++ edges.map(_.swap)).groupMap(_._1)(_._2)
23- BronKerbosch .maximumClique(neighbors)
24- }
23+ def maximumClique (edges : Set [Edge ]): Set [Computer ] =
24+ BronKerbosch .maximumClique(edges2neighbors(edges))
2525
26- def lanPartyPassword (edges : Set [Edge ]): String = {
27- val clique = maximumClique(edges)
28- clique.toSeq.sorted.mkString(" ," )
29- }
26+ def lanPartyPassword (edges : Set [Edge ]): String =
27+ maximumClique(edges).toSeq.sorted.mkString(" ," )
3028
3129 def parseEdge (s : String ): Edge = s match {
3230 case s " $from- $to" => (from, to)
0 commit comments