Skip to content

Instantly share code, notes, and snippets.

import "golang.org/x/exp/constraints"
type Number interface {
constraints.Integer | constraints.Float
}
func AddNumbers[T Number](a, b T) T {
return a + b
}
@sausheong
sausheong / add.go
Created May 16, 2022 05:23
generics
func Add[T int | float64](a, b T) T {
return a + b
}
type Integer struct {
...
}
func (i Integer) Plus(a Number) Number {
...
}
type Number interface {
Plus(Number) Number
}
func Add(a, b Number) Number {
return a.Plus(b)
}
@sausheong
sausheong / func1.go
Created May 15, 2022 15:29
generics
func AddInt(a, b int) int {
return a + b
}
func AddFloat(a, b float64) float64 {
return a + b
}
unc main() {
graph := buildGraph()
fmt.Println("GRAPH\n-----")
nodes := sortNodes(graph.Nodes)
for _, node := range nodes {
fmt.Printf("%s -> %v\n", node.name, graph.Edges[node.name])
}
fmt.Println()
bMST := boruvka(graph)
package main
import (
"testing"
)
func BenchmarkBoruvka(b *testing.B) {
graph := buildGraph()
b.ResetTimer()
for i := 0; i < b.N; i++ {
boruvka(graph)
func main() {
graph := buildGraph()
fmt.Println("GRAPH\n-----")
nodes := sortNodes(graph.Nodes)
for _, node := range nodes {
fmt.Printf("%s -> %v\n", node.name, graph.Edges[node.name])
}
fmt.Println()
bMST := boruvka(graph)
func (g *Graph) HasNode(name string) (yes bool) {
for _, n := range g.Nodes {
if n.name == name {
yes = true
}
}
return
}
func prim(graph *Graph, nodeName string) (mst *Graph) {
mst = NewGraph()
h := &Heap{}
heap.Init(h)
startNode := graph.GetNode(nodeName)
mst.AddNode(startNode)
for _, edge := range graph.Edges[startNode.name] {
heap.Push(h, NodePair{startNode, edge})
}