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

Lines changed: 31 additions & 14 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy