puzzle-solvers

Assorted solvers for various puzzles

git clone https://code.pdelong.com/puzzle-solvers.git

 1package solver
 2
 3import (
 4	"fmt"
 5	"os"
 6	"strings"
 7)
 8
 9func ParseBoard(str string) (*Board, error) {
10	str = strings.TrimSpace(str)
11
12	if len(str) != 81 {
13		return nil, fmt.Errorf("board too big")
14	}
15
16	b := &Board{}
17	for i, c := range str {
18		if c == '.' {
19			b[i] = 0
20			continue
21		}
22
23		if c > '9' || c < '0' {
24			return nil, fmt.Errorf("unknown char: %c", c)
25		}
26
27		b[i] = int8(c - '0')
28	}
29
30	return b, nil
31}
32
33func ReadPuzzles(file string) ([]*Board, error) {
34	b, err := os.ReadFile(file)
35	if err != nil {
36		return nil, err
37	}
38
39	s := string(b)
40	boards := make([]*Board, 0)
41
42	lines := strings.Split(strings.TrimSpace(s), "\n")
43	for _, line := range lines {
44		b, err := ParseBoard(line)
45		if err != nil {
46			return nil, err
47		}
48
49		boards = append(boards, b)
50	}
51
52	return boards, nil
53}
54
55func ReadPuzzle(file string) (*Board, error) {
56	b, err := os.ReadFile(file)
57	if err != nil {
58		return nil, err
59	}
60
61	return ParseBoard(string(b))
62}