about summary refs log tree commit diff stats
path: root/go/mermaid-graph.go
diff options
context:
space:
mode:
authorelioat <elioat@tilde.institute>2024-08-10 09:43:04 -0400
committerelioat <elioat@tilde.institute>2024-08-10 09:43:04 -0400
commit391793456f87ccba1a8e1775e1695ced9594ae33 (patch)
tree1489212616096116e2c16b60e3de4387ff10025b /go/mermaid-graph.go
parentf67aecd5015ffd45701981bf5c2c95836f47efe7 (diff)
downloadtour-391793456f87ccba1a8e1775e1695ced9594ae33.tar.gz
*
Diffstat (limited to 'go/mermaid-graph.go')
-rw-r--r--go/mermaid-graph.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/go/mermaid-graph.go b/go/mermaid-graph.go
new file mode 100644
index 0000000..d40bf9e
--- /dev/null
+++ b/go/mermaid-graph.go
@@ -0,0 +1,62 @@
+package main
+
+import (
+	"fmt"
+	"math/rand"
+	"strings"
+	"time"
+)
+
+type Graph struct {
+	adjacencyList map[int][]int
+}
+
+func NewGraph() *Graph {
+	return &Graph{adjacencyList: make(map[int][]int)}
+}
+
+func (g *Graph) addEdge(node1, node2 int) {
+	g.adjacencyList[node1] = append(g.adjacencyList[node1], node2)
+	g.adjacencyList[node2] = append(g.adjacencyList[node2], node1)
+}
+
+func generateConnectedGraph(n int) *Graph {
+	rand.Seed(time.Now().UnixNano())
+	graph := NewGraph()
+
+	// Start with node 0
+	for i := 1; i < n; i++ {
+		// Connect the new node i to a random existing node
+		existingNode := rand.Intn(i)
+		graph.addEdge(i, existingNode)
+	}
+
+	return graph
+}
+
+func generateMermaid(graph *Graph) string {
+	var sb strings.Builder
+
+	sb.WriteString("graph TD;\n")
+
+	visited := make(map[string]bool)
+
+	for node, edges := range graph.adjacencyList {
+		for _, edge := range edges {
+			// Ensure each edge is only printed once
+			if !visited[fmt.Sprintf("%d-%d", node, edge)] && !visited[fmt.Sprintf("%d-%d", edge, node)] {
+				sb.WriteString(fmt.Sprintf("    %d --> %d;\n", node, edge))
+				visited[fmt.Sprintf("%d-%d", node, edge)] = true
+			}
+		}
+	}
+
+	return sb.String()
+}
+
+func main() {
+	graph := generateConnectedGraph(100)
+	mermaid := generateMermaid(graph)
+
+	fmt.Println(mermaid)
+}