@@ -40,9 +40,28 @@ func part1(
40
40
func part2 (
41
41
input string ,
42
42
) string {
43
+ cliques , err := getCliques (input )
44
+ if err != nil {
45
+ return fmt .Sprintf ("Failed to get cliques: %v" , err )
46
+ }
47
+
48
+ var biggest []string
49
+ for _ , c := range cliques {
50
+ if len (c ) > len (biggest ) {
51
+ biggest = c
52
+ }
53
+ }
54
+ slices .Sort (biggest )
55
+
56
+ return fmt .Sprintf ("Password: %s" , strings .Join (biggest , "," ))
57
+ }
58
+
59
+ func getCliques (
60
+ input string ,
61
+ ) ([][]string , error ) {
43
62
graph , intToName , err := parseGonumGraph (input )
44
63
if err != nil {
45
- return fmt . Sprintf ( "Failed to parse input: %v" , err )
64
+ return [][] string {} , err
46
65
}
47
66
48
67
nodes := graph .Nodes ()
@@ -52,20 +71,18 @@ func part2(
52
71
}
53
72
54
73
cliques := bronKerbosch ([]int64 {}, p , graph )
55
-
56
- var biggest []int64
57
- for _ , c := range cliques {
58
- if len (c ) > len (biggest ) {
59
- biggest = c
74
+ out := make ([][]string , len (cliques ))
75
+ for i , clique := range cliques {
76
+ strClique := make ([]string , len (clique ))
77
+ for j , node := range clique {
78
+ if name , ok := intToName [node ]; ok {
79
+ strClique [j ] = name
80
+ } else {
81
+ return out , fmt .Errorf ("could not find name for node %d" , node )
82
+ }
60
83
}
84
+ out [i ] = strClique
61
85
}
62
86
63
- names := make ([]string , len (biggest ))
64
- for i , n := range biggest {
65
- names [i ] = intToName [n ]
66
- }
67
- slices .Sort (names )
68
- name := strings .Join (names , "," )
69
-
70
- return fmt .Sprintf ("Password: %s" , name )
87
+ return out , nil
71
88
}
0 commit comments