public bool Solve(int[,] sodokuBoard) { List <ISodokuStrategy> strategies = new List <ISodokuStrategy>() { new SimpleMarkupStrategy(_sodokuMapper), new NakedPairsStrategy(_sodokuMapper) }; var currentState = _sodokuBoardStateManager.GenerateState(sodokuBoard); var nextState = _sodokuBoardStateManager.GenerateState(strategies.First().Solve(sodokuBoard)); while (!_sodokuBoardStateManager.IsSolved(sodokuBoard) && currentState != nextState) { currentState = nextState; foreach (var strategy in strategies) { nextState = _sodokuBoardStateManager.GenerateState(strategy.Solve(sodokuBoard)); } } return(_sodokuBoardStateManager.IsSolved(sodokuBoard)); }