summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2023-02-25 13:06:19 +0100
committerMike Vink <mike1994vink@gmail.com>2023-02-25 13:06:19 +0100
commit536b1f2b33f3d98f607dd8776f8b437d13c200c0 (patch)
tree336521357d043d0baf2c8913583afddd19029bf8
parent11394225ead868425c29df7576cdee0c22d61c5b (diff)
update
-rw-r--r--day16.go19
-rw-r--r--pkg/dijkstra.go20
-rw-r--r--pkg/dijkstra_test.go79
3 files changed, 118 insertions, 0 deletions
diff --git a/day16.go b/day16.go
index 0fedb24..27aa028 100644
--- a/day16.go
+++ b/day16.go
@@ -27,6 +27,18 @@ func readValves(f io.Reader) map[string]Valve {
return nil
}
+type indexer interface {
+ Index() int
+}
+
+type proto struct {
+ i int
+}
+
+func (p proto) Index() int {
+ return p.i
+}
+
/*
AA,0 ===================
||.............\\ \\
@@ -48,4 +60,11 @@ func main() {
}
valves := readValves(fh)
fmt.Println(valves)
+
+ p := proto{}
+ ps := []proto{p}
+ ps[0].i = 100
+ fmt.Println(ps)
+ ps[0].i = 314
+ fmt.Println(ps)
}
diff --git a/pkg/dijkstra.go b/pkg/dijkstra.go
new file mode 100644
index 0000000..269ae30
--- /dev/null
+++ b/pkg/dijkstra.go
@@ -0,0 +1,20 @@
+package algos
+
+const Infinity uint32 = 1<<32 - 1
+
+type Noder interface {
+ Neighbors(n Node) []Node
+ UpdateOrEnd(n Node) bool
+}
+
+type Node interface {
+ Index() int
+}
+
+type HeapItem struct {
+ Node
+ index int
+}
+
+func dijkstra(searchSpace []Node, start Node, noder Noder) {
+}
diff --git a/pkg/dijkstra_test.go b/pkg/dijkstra_test.go
new file mode 100644
index 0000000..85cf4f8
--- /dev/null
+++ b/pkg/dijkstra_test.go
@@ -0,0 +1,79 @@
+package algos
+
+import (
+ "strings"
+ "testing"
+)
+
+const day12input string = `Sabqponm
+abcryxxl
+accszExk
+acctuvwj
+abdefghi`
+
+const (
+ startSquare = 'S'
+ endSquare = 'E'
+)
+
+func byte2height(b byte) int {
+ return int(b - 'a')
+}
+
+type square struct {
+ x, y, i int
+ height int
+}
+
+func (s *square) Index() int { return s.i }
+
+type squareMap [][]Node
+
+func (s squareMap) Neighbors(n Node) []Node
+func (s squareMap) UpdateOrEnd(n Node) bool
+
+func readInput(input string) (start, end *square, squares [][]Node, flat []Node) {
+ y := 0
+ for _, s := range strings.Split(input, "\n") {
+ squareRow := make([]Node, len(s))
+ for x, c := range s {
+ if c == 'S' {
+ s := &square{x, y, x + (y * len(s)), byte2height('a')}
+ squareRow[x] = s
+ start = s
+ } else if c == 'E' {
+ s := &square{x, y, x + (y * len(s)), byte2height('z')}
+ squareRow[x] = s
+ end = s
+ } else {
+ s := &square{x, y, x + (y * len(s)), byte2height(byte(c))}
+ squareRow[x] = s
+ }
+ }
+ squares = append(squares, squareRow)
+ flat = append(flat, squareRow...)
+ y++
+ }
+ return
+}
+
+func Test_dijkstra(t *testing.T) {
+ start, end, squares, flat := readInput(day12input)
+ type args struct {
+ searchSpace []Node
+ start Node
+ noder Noder
+ }
+ tests := []struct {
+ name string
+ args args
+ }{
+ {"dummy", args{nil, nil, nil}},
+ {"test", args{flat, start}},
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ dijkstra(tt.args.searchSpace, tt.args.start, tt.args.noder)
+ })
+ }
+}