public void HasUniqueSolution_WithOneSolutionUsingDiagonals_IsTrue()
        {
            var puzzle = new PuzzleWithPossibleValues(new int?[][] {
                new int?[] { null, null, null, null, null, null, null, 1, 2 },
                new int?[] { null, 5, null, null, 9, null, null, null, null },
                new int?[] { null, null, null, null, null, 8, null, null, null },
                new int?[] { null, 3, null, null, null, null, 5, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, 9, null },
                new int?[] { null, null, null, null, 4, 3, 9, null, null },
                new int?[] { 6, null, 1, null, null, null, 7, null, null },
                new int?[] { 2, null, null, null, null, null, null, null, null },
            });
            var magicSquares = new Box[] {
                new Box(new Coordinate(3, 3), 3),
            };
            var solver = new PuzzleSolver <PuzzleWithPossibleValues>(
                new DynamicRuleKeeper(
                    new IRule[] {
                new RowUniquenessRule(),
                new ColumnUniquenessRule(),
                new BoxUniquenessRule(),
                new MagicSquaresRule(puzzle.Size, magicSquares, includeDiagonals: true),
            }));

            Assert.True(solver.HasUniqueSolution(puzzle));
        }
Example #2
0
        public void TestMethod2()
        {
            string input    = "abcde xyz ecdab";
            int    solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 0);
        }
Example #3
0
        public void TestMethod5()
        {
            string input    = @"oiii ioii iioi iiio";
            int    solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 0);
        }
Example #4
0
    public async Task Can_Solve_Puzzle_With_Visualization()
    {
        // Arrange
        string year = "2016";
        string day  = "8";

        var browser = new BrowserFixture(OutputHelper);
        await browser.WithPageAsync(async (page) =>
        {
            PuzzleSolver solver = await LoadApplication(page);

            await solver.SelectYearAsync(year);
            await solver.SelectDayAsync(day);

            string input = await GetPuzzleInputAsync(year, day);
            await solver.SelectInputAsync(input);

            // Act
            await solver.SolveAsync();

            // Assert
            await solver.SolutionsAsync().ShouldBe(new[] { "121", "RURUCEOEIL" });
            await solver.VisualizationsAsync().ShouldBe(1);
        });
    }
        public void Solve_WithMegaPuzzle_Solves()
        {
            var puzzle = new Puzzle(new int?[, ] {
                { null, null, null, null, 10, 1, null, 8, null, 15, 3, 11, null, 2, 16, null },
                { 14, null, 2, null, null, 4, 3, null, null, 13, 8, null, null, 12, null, null },
                { null, null, null, 12, null, null, null, 15, null, null, null, 7, null, null, 9, 10 },
                { 1, 10, 15, null, 6, null, null, null, null, 14, null, null, null, null, null, 11 },
                { null, 11, 14, 6, null, null, null, 9, 13, 8, null, null, null, null, 2, 3 },
                { 12, null, null, null, 4, null, 7, 3, 11, 6, null, null, 16, null, 5, null },
                { 13, 16, null, 2, null, null, null, 1, null, null, 5, null, 10, 9, null, null },
                { null, 4, null, null, 13, null, 2, null, null, null, 16, 3, 11, null, null, null },
                { null, null, null, 10, 3, 6, null, null, null, 9, null, 12, null, null, 4, null },
                { null, null, 12, 15, null, 9, null, null, 7, null, null, null, 1, null, 3, 14 },
                { null, 1, null, 4, null, null, 5, 12, 3, 10, null, 8, null, null, null, 2 },
                { 3, 6, null, null, null, null, 15, 10, 4, null, null, null, 12, 5, 7, null },
                { 2, null, null, null, null, null, 4, null, null, null, null, 15, null, 16, 11, 9 },
                { 4, 14, null, null, 16, null, null, null, 2, null, null, null, 6, null, null, null },
                { null, null, 16, null, null, 7, 8, null, null, 4, 10, null, null, 14, null, 5 },
                { null, 3, 6, null, 9, 12, 14, null, 8, null, 13, 16, null, null, null, null }
            });
            var solver = new PuzzleSolver <Puzzle>(
                new List <IConstraint> {
                new RowUniquenessConstraint(), new ColumnUniquenessConstraint(), new BoxUniquenessConstraint(), new DiagonalUniquenessConstraint()
            });

            solver.Solve(puzzle);

            _AssertPuzzleSolved(puzzle);
        }
Example #6
0
        public void SolvesCorrectly_WithDiagonals()
        {
            var puzzle = new Puzzle(new int?[][] {
                new int?[] { null, null, null, null, null, null, null, 1, 2 },
                new int?[] { null, 5, null, null, 9, null, null, null, null },
                new int?[] { null, null, null, null, null, 8, null, null, null },
                new int?[] { null, 3, null, null, null, null, 5, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, 9, null },
                new int?[] { null, null, null, null, 4, 3, 9, null, null },
                new int?[] { 6, null, 1, null, null, null, 7, null, null },
                new int?[] { 2, null, null, null, null, null, null, null, null },
            });
            var boxesToConstrain = new Box[] {
                new Box(new Coordinate(3, 3), 3),
            };
            var solver = new PuzzleSolver <Puzzle>(
                new IConstraint[] {
                new RowUniquenessConstraint(),
                new ColumnUniquenessConstraint(),
                new BoxUniquenessConstraint(),
                new MagicSquaresConstraint(
                    _CreateStandardPossibleValues(9),
                    boxesToConstrain, includeDiagonals: true)
            });

            var solution = solver.Solve(puzzle);

            PuzzleTestUtils.AssertStandardPuzzleSolved(solution);
            MagicSquareTests.AssertMagicSquaresSatisfied(solution, boxesToConstrain, 15, verifyDiagonals: true);
        }
    private IEnumerator doSolve()
    {
        Stopwatch s = new Stopwatch();

        s.Start();
        List <string> longPath = PuzzleSolver.DepthFirstSearch(_state);

        s.Stop();
        print("DFS took " + s.ElapsedMilliseconds + " ms");
        print("States: " + longPath.Count);

        s.Reset();

        s.Start();
        List <string> path = PuzzleSolver.BreadthFirstSearch(_state);

        s.Stop();
        path.Reverse();
        print("BFS took " + s.ElapsedMilliseconds + " ms");
        print("States: " + path.Count);

        print("Start state: " + _state);
        StartCoroutine(animatePath(path));
        yield return(null);
    }
Example #8
0
        public void Solve_Test2()
        {
            var sb = new StringBuilder();

            sb.AppendLine("0 2 3 0");
            sb.AppendLine("0 0 0 0");
            sb.AppendLine("3 1 2 4");
            sb.AppendLine("0 0 0 0");
            var puzzleString = sb.ToString();

            var puzzle = PuzzleHelper.BuildPuzzle(puzzleString);

            var solver = new PuzzleSolver(puzzle);
            var result = solver.Solve();

            Assert.True(result);

            sb.Clear();
            sb.AppendLine("4 2 3 1");
            sb.AppendLine("1 3 4 2");
            sb.AppendLine("3 1 2 4");
            sb.AppendLine("2 4 1 3");
            var expectedSolution = sb.ToString();

            Assert.Equal(expectedSolution, puzzle.ToString());
        }
Example #9
0
        public void TestMethod4()
        {
            int input    = 1024;
            int solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 31);
        }
Example #10
0
        public void TestMethod3()
        {
            string input    = "1234";
            int    solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 0);
        }
Example #11
0
        public void TestMethod4()
        {
            string input    = "91212129";
            int    solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 9);
        }
Example #12
0
        public void TestMethod1()
        {
            string input    = "1122";
            int    solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 3);
        }
Example #13
0
        public void SolveRandomly_ValidPuzzle_SolvesPuzzle(Puzzle puzzle)
        {
            var solver = new PuzzleSolver(puzzle);

            solver.SolveRandomly();
            _AssertPuzzleSolved(puzzle);
        }
Example #14
0
        public void Solve_WithPuzzleConstructor_SolvesPuzzle(Puzzle puzzle)
        {
            var solver = new PuzzleSolver(puzzle);

            solver.Solve();
            _AssertPuzzleSolved(puzzle);
        }
Example #15
0
        public void HasUniqueSolution_NotUnique()
        {
            var puzzle = new Puzzle(new int?[][] {
                new int?[] { null, null, 9, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, 3, 5, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
            });
            var boxesToConstrain = new Box[] {
                new Box(new Coordinate(0, 0), 3),
                new Box(new Coordinate(3, 3), 3),
                new Box(new Coordinate(6, 6), 3),
            };
            var constraint = new MagicSquaresConstraint(
                _CreateStandardPossibleValues(9),
                boxesToConstrain, includeDiagonals: false);
            var solver = new PuzzleSolver <Puzzle>(
                new IConstraint[] {
                new RowUniquenessConstraint(),
                constraint,
            });

            Assert.False(solver.HasUniqueSolution(puzzle));
        }
Example #16
0
        public void TestMethod5()
        {
            int input    = 29;
            int solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 4);
        }
Example #17
0
        public void HasUniqueSolution_IsUniqueWithDiagonals()
        {
            var puzzle = new Puzzle(new int?[][] {
                new int?[] { null, null, null, null, null, null, null, 1, 2 },
                new int?[] { null, 5, null, null, 9, null, null, null, null },
                new int?[] { null, null, null, null, null, 8, null, null, null },
                new int?[] { null, 3, null, null, null, null, 5, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, 9, null },
                new int?[] { null, null, null, null, 4, 3, 9, null, null },
                new int?[] { 6, null, 1, null, null, null, 7, null, null },
                new int?[] { 2, null, null, null, null, null, null, null, null },
            });
            var boxesToConstrain = new Box[] {
                new Box(new Coordinate(3, 3), 3),
            };
            var solver = new PuzzleSolver <Puzzle>(
                new IConstraint[] {
                new RowUniquenessConstraint(),
                new ColumnUniquenessConstraint(),
                new BoxUniquenessConstraint(),
                new MagicSquaresConstraint(
                    _CreateStandardPossibleValues(9),
                    boxesToConstrain, includeDiagonals: true)
            });

            Assert.True(solver.HasUniqueSolution(puzzle));
        }
Example #18
0
        public void TestMethod6()
        {
            int input    = 36;
            int solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 5);
        }
Example #19
0
        public void Solve_WithMegaPuzzle_Solves()
        {
            var puzzle = new Puzzle(new int?[][] {
                new int?[] { null, null, null, null, 10, 1, null, 8, null, 15, 3, 11, null, 2, 16, null },
                new int?[] { 14, null, 2, null, null, 4, 3, null, null, 13, 8, null, null, 12, null, null },
                new int?[] { null, null, null, 12, null, null, null, 15, null, null, null, 7, null, null, 9, 10 },
                new int?[] { 1, 10, 15, null, 6, null, null, null, null, 14, null, null, null, null, null, 11 },
                new int?[] { null, 11, 14, 6, null, null, null, 9, 13, 8, null, null, null, null, 2, 3 },
                new int?[] { 12, null, null, null, 4, null, 7, 3, 11, 6, null, null, 16, null, 5, null },
                new int?[] { 13, 16, null, 2, null, null, null, 1, null, null, 5, null, 10, 9, null, null },
                new int?[] { null, 4, null, null, 13, null, 2, null, null, null, 16, 3, 11, null, null, null },
                new int?[] { null, null, null, 10, 3, 6, null, null, null, 9, null, 12, null, null, 4, null },
                new int?[] { null, null, 12, 15, null, 9, null, null, 7, null, null, null, 1, null, 3, 14 },
                new int?[] { null, 1, null, 4, null, null, 5, 12, 3, 10, null, 8, null, null, null, 2 },
                new int?[] { 3, 6, null, null, null, null, 15, 10, 4, null, null, null, 12, 5, 7, null },
                new int?[] { 2, null, null, null, null, null, 4, null, null, null, null, 15, null, 16, 11, 9 },
                new int?[] { 4, 14, null, null, 16, null, null, null, 2, null, null, null, 6, null, null, null },
                new int?[] { null, null, 16, null, null, 7, 8, null, null, 4, 10, null, null, 14, null, 5 },
                new int?[] { null, 3, 6, null, 9, 12, 14, null, 8, null, 13, 16, null, null, null, null }
            });
            var solver = new PuzzleSolver <Puzzle>(
                new IConstraint[] { new RowUniquenessConstraint(), new ColumnUniquenessConstraint(), new BoxUniquenessConstraint(), new DiagonalUniquenessConstraint() });

            var solved = solver.Solve(puzzle);

            PuzzleTestUtils.AssertStandardPuzzleSolved(solved);
        }
Example #20
0
        public void TestMethod7()
        {
            int input    = 43;
            int solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 6);
        }
Example #21
0
    public void PuzzleSolverTest3_TwoStamps()
    {
        Box box = new Box();

        box.RotateYLeft();
        box.RotateZLeft();
        box.Stamp();
        box.RotateYLeft();
        box.RotateYLeft();
        box.Stamp();

        PuzzleSolver       solver   = new PuzzleSolver();
        List <Box.Command> commands = solver.Solve(box);

        List <Box.Command> expectedCommands = new List <Box.Command> {
            Box.Command.Left90Y,
            Box.Command.Left90Z,
            Box.Command.Stamp,
            Box.Command.Left90Y,
            Box.Command.Left90Y,
            Box.Command.Stamp
        };

        Assert.True(ListsAreEqual(expectedCommands, commands));
    }
Example #22
0
        public void TestMethod10()
        {
            int input    = 57;
            int solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 8);
        }
Example #23
0
    public async Task Can_Solve_Puzzle_With_Input_And_Input_File(
        string year,
        string day,
        string[] arguments,
        string[] expected)
    {
        // Arrange
        var browser = new BrowserFixture(OutputHelper);
        await browser.WithPageAsync(async (page) =>
        {
            PuzzleSolver solver = await LoadApplication(page);

            await solver.SelectYearAsync(year);
            await solver.SelectDayAsync(day);

            await solver.InputArgumentsAsync(arguments);

            string input = await GetPuzzleInputAsync(year, day);
            await solver.SelectInputAsync(input);

            // Act
            await solver.SolveAsync();

            // Assert
            await solver.SolutionsAsync().ShouldBe(expected);
        });
    }
        protected void SolveButton_Click(object sender, EventArgs e)
        {
            //try
            //{
            Puzzle puzzle;

            if (!TestPuzzles.Puzzles.TryGetValue(PuzzleDropDown.Text, out puzzle))
            {
                throw new InvalidPuzzleException("Select Valid Puzzle from list");
            }
            else
            {
                PuzzleSolver solver = new PuzzleSolver(puzzle);
                solver.Solve();

                if (solver.Solve())
                {
                    UpdateDisplay(puzzle);
                }
                else
                {
                    //MessageBox.Show(solver.ErrorMessage);
                }
            }
            //}
            //catch (InvalidPuzzleException ex)
            //{
            //     MessageBox.Show(ex.Message);
            //}
        }
Example #25
0
        public void TestMethod1()
        {
            string input    = "abcde fghij";
            int    solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 1);
        }
Example #26
0
        public void TestMethod3()
        {
            string input    = "aa bb cc dd aaa";
            int    solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 1);
        }
Example #27
0
        public void TestMethod3()
        {
            string input    = "a ab abc abd abf abj";
            int    solution = PuzzleSolver.Solve(input);

            Assert.AreEqual(solution, 1);
        }
Example #28
0
        public void Solve_WithManySolutions_CanSolve()
        {
            var puzzle = new Puzzle(new int?[][] {
                new int?[] { null, null, 9, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, 3, 5, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
            });
            var boxesToConstrain = new Box[] {
                new Box(new Coordinate(0, 0), 3),
                new Box(new Coordinate(3, 3), 3),
                new Box(new Coordinate(6, 6), 3),
            };
            var constraint = new MagicSquaresConstraint(
                _CreateStandardPossibleValues(9),
                boxesToConstrain, includeDiagonals: false);
            var solver = new PuzzleSolver <Puzzle>(
                new IConstraint[] {
                new RowUniquenessConstraint(),
                constraint,
            });

            var solution = solver.Solve(puzzle);

            Assert.Equal(0, solution.NumEmptySquares);
            MagicSquareTests.AssertMagicSquaresSatisfied(
                solution, boxesToConstrain, expectedSum: 15, verifyDiagonals: false);
        }
Example #29
0
        public void TestMethod1()
        {
            string input    = @"0	2	7	0";
            int    solution = PuzzleSolver.Solve62(input);

            Assert.AreEqual(solution, 4);
        }
        public void HasUniqueSolution_WithManySolutions_IsFalse()
        {
            var puzzle = new PuzzleWithPossibleValues(new int?[][] {
                new int?[] { null, null, 9, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, 3, 5, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
                new int?[] { null, null, null, null, null, null, null, null, null },
            });
            var magicSquares = new Box[] {
                new Box(new Coordinate(0, 0), 3),
                new Box(new Coordinate(3, 3), 3),
                new Box(new Coordinate(6, 6), 3),
            };
            var solver = new PuzzleSolver <PuzzleWithPossibleValues>(
                new DynamicRuleKeeper(
                    new IRule[] {
                new RowUniquenessRule(),
                new MagicSquaresRule(puzzle.Size, magicSquares, includeDiagonals: false),
            }));

            Assert.False(solver.HasUniqueSolution(puzzle));
        }