Example #1
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);
        }
        public void Solve_WithOneSolutionUsingDiagonals_Works()
        {
            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),
            }));

            var solution = solver.Solve(puzzle);

            PuzzleTestUtils.AssertStandardPuzzleSolved(solution);
            MagicSquareTests.AssertMagicSquaresSatisfied(
                solution, magicSquares, expectedSum: 15, verifyDiagonals: false);
        }
Example #3
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);
        }
        public void Solve_WithManySolutions_Works()
        {
            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),
            }));

            var solution = solver.Solve(puzzle);

            Assert.Equal(0, solution.NumEmptySquares);
            MagicSquareTests.AssertMagicSquaresSatisfied(
                solution, magicSquares, expectedSum: 15, verifyDiagonals: false);
        }