package sudoku import ( "errors" "fmt" "git.kleiax.de/homepage/libs/sudoku/board" "git.kleiax.de/homepage/libs/sudoku/logic" ) type Game struct { field *board.Field solver logic.Solver } func New(parser Parser, solver Solver, data []byte) (*Game, error) { err := parser.parse(data) if err != nil { return &Game{}, fmt.Errorf("can not create game: %w", err) } return &Game{solver: solver, field: parser.getField(0)}, nil } func (g *Game) Solve() error { g.solver.initStragies(g.field) for !g.isFinished() { if !g.nextSolveStep() { return errors.New("no strategy can solve the puzzle") } } return nil } func (g *Game) nextSolveStep() bool { return g.solver.run(0) } func (g *Game) prevSolveStep() { // far far in the future } func (g *Game) isFinished() bool { return g.field.isSolved() } func (g *Game) GetField() Field { return *g.field }