private void GuessCandidate(PuzzleIterator puzzleIterator, CellValue candidate) { var cell = new Cell(candidate.Value); puzzleIterator.SetCurrent(cell); ReduceCandidates(); }
private bool SolveCellsRecursively(PuzzleIterator puzzleIterator) { if (FindNextUndefinedCell(puzzleIterator)) { return(TryEachCandidate(puzzleIterator)); } return(PuzzleIsValid()); }
public bool Solve() { var puzzleIterator = new PuzzleIterator(_puzzle); puzzleIterator.MoveNext(); ReduceCandidates(); return(SolveCellsRecursively(new PuzzleIterator(puzzleIterator))); }
private bool FindNextUndefinedCell(PuzzleIterator iterator) { while (iterator.MoveNext()) { if (iterator.Current.Value == CellValue.Unknown.Value) { return(true); } } return(false); }
public bool PuzzleIsCompleted() { var iterator = new PuzzleIterator(_puzzle); while (iterator.MoveNext()) { if (iterator.Current.Value == 0) { return(false); } } return(true); }
private bool TryEachCandidate(PuzzleIterator puzzleIterator) { var memento = _puzzle.CreateMemento(); var candidates = puzzleIterator.Current.Candidates; foreach (var candidate in candidates) { _puzzle.SetMemento(memento); GuessCandidate(puzzleIterator, candidate); if (PuzzleIsSolved(puzzleIterator)) { return(true); } } return(false); }
public void SetUp() { var puzzle = new Puzzle(_testPuzzle); _iterator = new PuzzleIterator(puzzle); }
private bool PuzzleIsSolved(PuzzleIterator puzzleIterator) { return(PuzzleIsValid() && SolveCellsRecursively(new PuzzleIterator(puzzleIterator))); }