Skip to content
This repository was archived by the owner on Dec 28, 2024. It is now read-only.

Commit 124d753

Browse files
committed
Refactor day 23 part 2
1 parent 7a565d1 commit 124d753

File tree

1 file changed

+31
-14
lines changed

1 file changed

+31
-14
lines changed

solutions/day23/main.go

+31-14
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,28 @@ func part1(
4040
func part2(
4141
input string,
4242
) 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) {
4362
graph, intToName, err := parseGonumGraph(input)
4463
if err != nil {
45-
return fmt.Sprintf("Failed to parse input: %v", err)
64+
return [][]string{}, err
4665
}
4766

4867
nodes := graph.Nodes()
@@ -52,20 +71,18 @@ func part2(
5271
}
5372

5473
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+
}
6083
}
84+
out[i] = strClique
6185
}
6286

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
7188
}

0 commit comments

Comments
 (0)