Beispiel #1
0
        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));
        }
Beispiel #3
0
        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));
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        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));
        }