public void AnEasyBoardCanBeSolved() { var grid = GridBuilder.Easy(); var allSolvers = new AllSolvers(); var pencilMarkReducer = new PencilMarkReducer(); var success = true; while (success) { var pencilMarks = new PencilMarks(grid); var reductions = pencilMarkReducer.Reduce(grid, pencilMarks); var result = allSolvers.TryToSolveOneCell(grid, pencilMarks); if (result.ProgressMade) { grid = result.Grid; } success = result.ProgressMade; } var notValidBecause = grid.ValidateCompleteBoard(); Assert.True(string.IsNullOrWhiteSpace(notValidBecause)); }
public SolverResult TryToSolveOneCell(Grid grid, PencilMarks pencilMarks) { foreach (var solver in solvers) { var result = solver.TryToSolveOneCell(grid, pencilMarks); if (result.ProgressMade) { return(result); } } return(SolverResult.Failed(grid)); }