1package solver23import (4 "fmt"5 "strings"6)78type Board [81]int8910func (b *Board) String() string {11 var s strings.Builder1213 for i, n := range b {14 if i%9 == 0 && i > 0 {15 s.WriteRune('\n')16 }17 if i%27 == 0 && i > 0 {18 s.WriteRune('\n')19 }20 if i%3 == 0 && i%9 != 0 {21 s.WriteRune(' ')22 }2324 s.WriteRune(rune(n) + '0')25 }2627 return s.String()28}2930func (b *Board) Solve() *Board {31 ob := newOperateBoard()32 for idx, v := range b {33 if v == 0 {34 continue35 }36 if !ob.set(idx, int(v)) {37 fmt.Println("uh oh")38 return nil39 }40 }4142 solved := ob.solve()43 if solved == nil {44 return nil45 }4647 return solved.toBoard()48}