@@ -7,9 +7,11 @@ object Day23 {
7
7
type Computer = String
8
8
type Edge = (Computer , Computer )
9
9
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)
12
12
13
+ def find3Cliques (edges : Set [Edge ]): Set [Set [Computer ]] = {
14
+ val neighbors = edges2neighbors(edges)
13
15
for {
14
16
(from, to) <- edges
15
17
third <- neighbors(from) & neighbors(to)
@@ -18,15 +20,11 @@ object Day23 {
18
20
19
21
def count3CliquesT (edges : Set [Edge ]): Int = find3Cliques(edges).count(_.exists(_.startsWith(" t" )))
20
22
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))
25
25
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(" ," )
30
28
31
29
def parseEdge (s : String ): Edge = s match {
32
30
case s " $from- $to" => (from, to)
0 commit comments