1package solver23import (4 "fmt"5 "os"6 "strings"7)89func ParseBoard(str string) (*Board, error) {10 str = strings.TrimSpace(str)1112 if len(str) != 81 {13 return nil, fmt.Errorf("board too big")14 }1516 b := &Board{}17 for i, c := range str {18 if c == '.' {19 b[i] = 020 continue21 }2223 if c > '9' || c < '0' {24 return nil, fmt.Errorf("unknown char: %c", c)25 }2627 b[i] = int8(c - '0')28 }2930 return b, nil31}3233func ReadPuzzles(file string) ([]*Board, error) {34 b, err := os.ReadFile(file)35 if err != nil {36 return nil, err37 }3839 s := string(b)40 boards := make([]*Board, 0)4142 lines := strings.Split(strings.TrimSpace(s), "\n")43 for _, line := range lines {44 b, err := ParseBoard(line)45 if err != nil {46 return nil, err47 }4849 boards = append(boards, b)50 }5152 return boards, nil53}5455func ReadPuzzle(file string) (*Board, error) {56 b, err := os.ReadFile(file)57 if err != nil {58 return nil, err59 }6061 return ParseBoard(string(b))62}