diff options
| author | Mike Vink <mike1994vink@gmail.com> | 2023-02-25 13:06:19 +0100 |
|---|---|---|
| committer | Mike Vink <mike1994vink@gmail.com> | 2023-02-25 13:06:19 +0100 |
| commit | 536b1f2b33f3d98f607dd8776f8b437d13c200c0 (patch) | |
| tree | 336521357d043d0baf2c8913583afddd19029bf8 | |
| parent | 11394225ead868425c29df7576cdee0c22d61c5b (diff) | |
update
| -rw-r--r-- | day16.go | 19 | ||||
| -rw-r--r-- | pkg/dijkstra.go | 20 | ||||
| -rw-r--r-- | pkg/dijkstra_test.go | 79 |
3 files changed, 118 insertions, 0 deletions
@@ -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) + }) + } +} |
