1package sudoku23import "fmt"45type cell struct {6 x, y int7 v int8}910type grid = [9][9]cell1112func newGrid(provided []cell) grid {13 var g grid14 for i := range gridSize {15 g[i] = [gridSize]cell{}1617 for j := range gridSize {18 g[i][j].x = j19 g[i][j].y = i20 }21 }22 for _, hint := range provided {23 g[hint.y][hint.x].v = hint.v24 }25 return g26}2728func (c cell) String() string {29 return fmt.Sprintf("r%dc%d=%d", c.y, c.x, c.v)30}3132func (m Model) isSolved() bool {33 conflicts := computeConflicts(m.grid)34 return isSolvedWith(m.grid, conflicts)35}3637func isSolvedWith(g grid, conflicts [gridSize][gridSize]bool) bool {38 for y := range gridSize {39 for x := range gridSize {40 if g[y][x].v == 0 || conflicts[y][x] {41 return false42 }43 }44 }45 return true46}