Time to prove the solver on real puzzles across the whole difficulty range. Today you solve a suite - an easy one, a hard one, a known hardest, and a minimal 17-clue puzzle - to their exact solved grids, each verified complete and valid.
Solve a suite of real puzzles and assert each exact solution is complete and valid.
This is the promise the project was built to keep: a solver that handles any valid Sudoku. The suite spans the range on purpose - a gentle 32-clue puzzle that falls to pure propagation, a fiendish 21-clue puzzle that only search can crack, and a minimal 17-clue puzzle at the theoretical edge of how few clues a proper puzzle can have. Each one comes back with its exact solved grid, and each is checked complete and valid, so nothing is taken on trust.
Every layer proves itself here at once. Parsing turns each string into a grid; the candidate grid and propagation strip out the forced digits; the most-constrained-cell search fills the rest; and completeness plus validity confirm the answer. That the same handful of functions solves puzzles this different, to the exact character, is the whole point - a small, correct constraint-satisfaction engine, and it is yours.
puzzles := []string{easy, hard, clue17}for _, s := range puzzles {sol, ok := Solve(Parse(s))// ok == true, IsComplete(sol) && IsValid(sol),// and GridString(sol) equals the known answer for s}