1package nonogram23import (4 "strings"5)67type (8 grid [][]rune9 state string10)1112func newGrid(s state) grid {13 rows := strings.Split(string(s), "\n")1415 grid := make([][]rune, len(rows))1617 for i, col := range rows {18 grid[i] = []rune(col)19 }2021 return grid22}2324func (g grid) String() string {25 rows := make([]string, len(g))2627 for i, row := range g {28 rows[i] = string(row)29 }3031 grid := strings.Join(rows, "\n")32 return grid33}3435func createEmptyState(h, w int) state {36 if h <= 0 || w <= 0 {37 return ""38 }3940 var b strings.Builder41 b.Grow((w + 1) * h)4243 for i := range h {44 for range w {45 b.WriteRune(emptyTile)46 }47 if i < h-1 {48 b.WriteRune('\n')49 }50 }5152 return state(b.String())53}