Example #1
0
        public Core.GrilleSudoku SolveWithTimeLimit(Core.GrilleSudoku puzzle, TimeSpan maxDuration)
        {
            try
            {
                Core.GrilleSudoku toReturn = puzzle.CloneSudoku();

                Task task = Task.Factory.StartNew(() => Solver.Solve(toReturn));
                task.Wait(maxDuration);
                if (!task.IsCompleted)
                {
                    throw new ApplicationException($"Solver {ToString()} has exceeded the maximum allowed duration {maxDuration.TotalSeconds} seconds");
                }
                return(toReturn);
            }
            catch (AggregateException ae)
            {
                throw ae.InnerExceptions[0];
            }
        }
        public void Solve(Core.GrilleSudoku s)
        {
            int[,] converted = new int[9, 9];
            for (int row = 0; row < 9; row++)
            {
                for (int column = 0; column < 9; column++)
                {
                    converted[row, column] = s.Cellules[row * 9 + column];
                }
            }
            var sudoku = SudokuCombinatorialEvolutionSolver.Sudoku.New(converted);

            var solver       = new SudokuSolver();
            var solvedSudoku = solver.Solve(sudoku, 200, 5000, 40);

            // Possibilité d'incrémenter le nombre d'organismes jusqu'à obtenir une solution?
            // Mais les meilleures optimisations à faire sont probablement dans le code du solver lui-même, auquel cas, il faudrait copier le code dans le projet plutôt que le référencer

            //var numOrganisms = 200;
            //SudokuCombinatorialEvolutionSolver.Sudoku solvedSudoku;
            //do
            //{
            //    solvedSudoku = solver.Solve(sudoku, numOrganisms, 5000, 1);
            //    numOrganisms *= 2;
            //} while (solvedSudoku.Error>0);


            Console.WriteLine(solvedSudoku.ToString());

            for (int row = 0; row < 9; row++)
            {
                for (int column = 0; column < 9; column++)
                {
                    s.Cellules[row * 9 + column] = solvedSudoku.CellValues[row, column];
                }
            }
        }
Example #3
0
 public void Solve(Core.GrilleSudoku s)
 {
 }