public bool Solve(int[,] sudokuBoard) { // initialize all of our strategies List <ISudokuStrategy> strategies = new List <ISudokuStrategy>() { new SimpleMarkUpStrategy(_sudokuMapper), new NakedPairStrategy(_sudokuMapper) }; //generate the state for the initial state var currentState = _sudokuBoardStateManager.GenerateState(sudokuBoard); //nextstate is follow after we run the first strategie and things change var nextState = _sudokuBoardStateManager.GenerateState(strategies.First().Solve(sudokuBoard)); // if the first strategie already solved the sudoku we dont need a while loop // and if the strategies are not changing anything - are not working anymore because its a really hard sudoku or something // stop the while loop while (!_sudokuBoardStateManager.IsSolved(sudokuBoard) && currentState != nextState) { // we change the states from the worse one to the newer one currentState = nextState; // we loop throught all strategies that we have prepaired and check the while loop again if we solved it foreach (var strategy in strategies) { nextState = _sudokuBoardStateManager.GenerateState(strategy.Solve(sudokuBoard)); } } return(_sudokuBoardStateManager.IsSolved(sudokuBoard)); }
public bool Solve(int[,] sudokuBoard) { // initialize strategies List <ISudokuStrategy> strategies = new List <ISudokuStrategy>() { new SimpleMarkUpStrategy(_sudokuMapper), new NakedPairsStrategy(_sudokuMapper) }; // generate current state of board var currentState = _sudokuBoardStateManager.GenerateState(sudokuBoard); // run Solve() on the first element of the sudokuBoard. Get its state. var nextState = _sudokuBoardStateManager.GenerateState(strategies.First().Solve(sudokuBoard)); // check whether it's solved. nextState should be different to currentState if the strategy did something to the board. while (!_sudokuBoardStateManager.IsSolved(sudokuBoard) && currentState != nextState) { currentState = nextState; foreach (var strategy in strategies) { // go to the next strategy. Try to solve it, generate the state, store it as nextState. nextState = _sudokuBoardStateManager.GenerateState(strategy.Solve(sudokuBoard)); } } return(_sudokuBoardStateManager.IsSolved(sudokuBoard)); }
public bool Solve(int[,] sudokuBoard) { List <ISudokuStrategy> strategies = new List <ISudokuStrategy>() { new SimpleMarkUpStrategy(_sudokuMapper), new NakedPairsStrategy(_sudokuMapper) }; var currentState = _sudokuBoardStateManager.GenerateState(sudokuBoard); var nextState = _sudokuBoardStateManager.GenerateState(strategies.First().Solve(sudokuBoard)); while (!_sudokuBoardStateManager.IsSolved(sudokuBoard) && currentState != nextState) { currentState = nextState; foreach (var strategy in strategies) { nextState = _sudokuBoardStateManager.GenerateState(strategy.Solve(sudokuBoard)); } } return(_sudokuBoardStateManager.IsSolved(sudokuBoard)); }
public bool Solve(int[,] sudokuBoard) { List <ISudokuStrategy> strategies = new List <ISudokuStrategy>() { }; var currentState = _sudokuBoardStateManager.GenerateState(sudokuBoard); var nextState = _sudokuBoardStateManager.GenerateState(strategies.First().Solve(sudokuBoard)); while ((!_sudokuBoardStateManager.IsSolved(sudokuBoard)) && (currentState != nextState)) { currentState = nextState; foreach (var strategy in strategies) { nextState = _sudokuBoardStateManager.GenerateState(strategy.Solve(sudokuBoard)); } } return(_sudokuBoardStateManager.IsSolved(sudokuBoard)); }
public bool SolveSudoku(int[,] sudokuBoard) { List <IStrategy> strategies = new List <IStrategy>() { new SimpleMarkUpStrategy(_sudokuMapper) }; var currentState = _sudokuBoardStateManager.GenerateState(sudokuBoard); var nextState = _sudokuBoardStateManager.GenerateState(strategies.First().Solve(sudokuBoard)); if (!_sudokuBoardStateManager.IsSolved(sudokuBoard)) { nextState = currentState; foreach (var strategy in strategies) { nextState = _sudokuBoardStateManager.GenerateState(strategy.Solve(sudokuBoard)); } } return(_sudokuBoardStateManager.IsSolved(sudokuBoard)); }
public bool Solve(int[,] sudokuBoard) { List <ISudokuStrategy> strategies = new List <ISudokuStrategy>() { }; var currentState = _sudokuBoardStateManager.GenerateState(sudokuBoard); // the next state is the state after solving with the very first strategy var nextState = _sudokuBoardStateManager.GenerateState(strategies.First().Solve(sudokuBoard)); // currentState == nextState when then strategy had no effect on our sudoku board while (!_sudokuBoardStateManager.IsSolved(sudokuBoard) && currentState != nextState) { currentState = nextState; foreach (var strategy in strategies) { nextState = _sudokuBoardStateManager.GenerateState(strategy.Solve(sudokuBoard)); } } return(_sudokuBoardStateManager.IsSolved(sudokuBoard)); }