Beispiel #1
0
        static void BashThroughSudokus(string path, int number, int start = 0)
        {
            Shape shape = Shape.SquareGrid(3);

            string [] lines = File.ReadAllLines(path);

            ISolver    solver = new RecursiveSolver();
            SolverArgs args   = new SolverArgs()
            {
                use_set_elimination = false
            };

            Stopwatch stopwatch = Stopwatch.StartNew();

            for (int i = start; i < number + start; i++)
            {
                int [] grid = lines [i].Select(x => int.Parse(x.ToString())).ToArray();

                int [] [] solution = solver.Solve(shape, grid, args, out int diff, out int [] [] fill_orders);

                if (solution.Length != 1)
                {
                    Console.WriteLine("!");
                }

                if ((i + 1) % 100 == 0)
                {
                    Console.Write(".");
                }
                if ((i + 1) % 500 == 0)
                {
                    Console.Write(" ");
                }
                if ((i + 1) % 1000 == 0)
                {
                    Console.Write("\n");
                }
                if ((i + 1) % 5000 == 0)
                {
                    Console.Write("\n");
                }
            }

            double n = stopwatch.Elapsed.TotalSeconds / number;

            Console.WriteLine("\n" + n * 1000 + "ms per sudoku.");
            Console.WriteLine(1 / n + " sudoku per second.");
        }
        public void RecursiveSolverSolvesForGivenMaze()
        {
            var actualSolution = new NodePtr[]
            {
                new NodePtr(1, 1),
                new NodePtr(4, 2)
            };

            var solution = solver.Solve(startPoint, endPoint);

            //Assert.AreEqual(actualSolution.Length, solution.Count);

            foreach (var node in actualSolution)
            {
                if (!solution.Contains(node))
                {
                    Assert.Fail();
                }
            }
        }
        private void MakeNonograms(bool createHandlers)
        {
            DrawDelayed(() => _solvedNonogram, 0, true);

            DrawDelayed(() =>
            {
                var clone = _solvedNonogram.Clone() as Nonogram;
                clone.Clear();
                var solver = new ContradictionSolver();
                solver.Solve(clone);
                return(clone);
            }, 1, createHandlers);

            DrawDelayed(() =>
            {
                var clone  = _solvedNonogram.Clone() as Nonogram;
                var solver = new ContradictionSolver();
                solver.SolveWithOneGuess(clone);
                return(clone);
            }, 2, createHandlers);


            DrawDelayed(() =>
            {
                var clone  = _solvedNonogram.Clone() as Nonogram;
                var solver = new ArcConsistencySolver();
                solver.Solve(clone);
                return(clone);
            }, 3, createHandlers);

            DrawDelayed(() =>
            {
                var clone  = _solvedNonogram.Clone() as Nonogram;
                var solver = new RecursiveSolver();
                solver.Solve(clone);
                return(clone);
            }, 4, createHandlers);
        }
Beispiel #4
0
        public SolveResult Solve(IProblemDefinition gridToSolve)
        {
            var iterativeSolver = new RecursiveSolver(gridToSolve.PossibilitiesSquareGrid);

            return iterativeSolver.Solve(gridToSolve.StartingKnownSquares);
        }