puzzle-solvers

Assorted solvers for various puzzles

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

 1package solver
 2
 3import (
 4	"fmt"
 5	"strings"
 6)
 7
 8type Board [81]int8
 9
10func (b *Board) String() string {
11	var s strings.Builder
12
13	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		}
23
24		s.WriteRune(rune(n) + '0')
25	}
26
27	return s.String()
28}
29
30func (b *Board) Solve() *Board {
31	ob := newOperateBoard()
32	for idx, v := range b {
33		if v == 0 {
34			continue
35		}
36		if !ob.set(idx, int(v)) {
37			fmt.Println("uh oh")
38			return nil
39		}
40	}
41
42	solved := ob.solve()
43	if solved == nil {
44		return nil
45	}
46
47	return solved.toBoard()
48}