1package wordsearch23import "strings"45type (6 grid [][]rune7 state string8)910func newGrid(s state) grid {11 if s == "" {12 return grid{}13 }1415 lines := strings.Split(string(s), "\n")16 g := make(grid, len(lines))1718 for i, line := range lines {19 g[i] = []rune(line)20 }2122 return g23}2425func (g grid) String() string {26 if len(g) == 0 {27 return ""28 }2930 lines := make([]string, len(g))31 for i, row := range g {32 lines[i] = string(row)33 }3435 return strings.Join(lines, "\n")36}3738func createEmptyGrid(height, width int) grid {39 g := make(grid, height)40 for i := range g {41 g[i] = make([]rune, width)42 for j := range g[i] {43 g[i][j] = ' '44 }45 }46 return g47}4849func (g grid) Get(x, y int) rune {50 if y < 0 || y >= len(g) || x < 0 || x >= len(g[y]) {51 return 052 }53 return g[y][x]54}5556func (g grid) Set(x, y int, r rune) {57 if y >= 0 && y < len(g) && x >= 0 && x < len(g[y]) {58 g[y][x] = r59 }60}