From 536b1f2b33f3d98f607dd8776f8b437d13c200c0 Mon Sep 17 00:00:00 2001 From: Mike Vink Date: Sat, 25 Feb 2023 13:06:19 +0100 Subject: update --- day16.go | 19 +++++++++++++ pkg/dijkstra.go | 20 +++++++++++++ pkg/dijkstra_test.go | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+) create mode 100644 pkg/dijkstra.go create mode 100644 pkg/dijkstra_test.go 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) + }) + } +} -- cgit v1.2.3