Ejemplo n.º 1
0
            public void TestProblemBoard()
            {
                IBoard board = new Board("904581600923760580601392470002810900098420100007956320736148259845239716219675843");
                var finder = new SimpleMoveFinder();
                var moves = finder.FindMoves(new BoardCells(board));

                string foo = "bar";

                moves = finder.FindMoves(new BoardCells(new Board("000500000003000000601090400002010900090420100007900320736148259800000710209070003")));
                // now get forced moves
            }
Ejemplo n.º 2
0
            public void WillReturnTwoMovesWhenOnlyTwoExist()
            {
                int[,] data = new int[,] {
                    {9,6,2,7,1,5,8,3,4},
                    {4,7,8,9,6,3,5,1,2},
                    {3,1,5,4,2,8,6,9,7},
                    {1,2,7,6,5,9,3,4,8},
                    {8,9,4,2,3,1,7,5,6},
                    {5,3,6,8,7,4,9,2,1},
                    {6,5,3,1,4,7,2,8,0},
                    {7,8,1,3,9,2,4,6,0},
                    {2,4,9,5,8,6,1,7,3}
                };

                var finder = new SimpleMoveFinder();
                var moves = finder.FindMoves(new BoardCells(new Board(data)));
                Assert.Equal(2, moves.Count);
            }
Ejemplo n.º 3
0
        public void CanSolveABoardWithTwoForcedMovesRemaining()
        {
            int[,] data = new int[,] {
                {9,6,2,7,1,5,8,3,4},
                {4,7,8,9,6,3,5,1,2},
                {3,1,5,4,2,8,6,9,7},
                {1,2,7,6,5,9,3,4,8},
                {8,9,4,2,3,1,7,5,6},
                {5,3,6,8,7,4,9,2,1},
                {6,5,3,1,4,7,2,8,9},
                {7,8,1,3,9,2,4,0,5},
                {2,4,9,5,8,6,1,7,0}
            };
            var moveFinder = new SimpleMoveFinder();
            var player = new SimplePlayer(moveFinder, new SimpleEvaluator(moveFinder));
            var result = player.SolveBoard(new Board(data));

            Assert.Equal(2, result.MovesPlayed.Count);

            var mv1 = from m in result.MovesPlayed
                      where m.Row == 8 && m.Column == 8 && m.Value == 3
                      select m;

            var mv2 = from m in result.MovesPlayed
                      where m.Row == 7 && m.Column == 7 && m.Value == 6
                      select m;

            int[,] solveddata = new int[,] {
                {9,6,2,7,1,5,8,3,4},
                {4,7,8,9,6,3,5,1,2},
                {3,1,5,4,2,8,6,9,7},
                {1,2,7,6,5,9,3,4,8},
                {8,9,4,2,3,1,7,5,6},
                {5,3,6,8,7,4,9,2,1},
                {6,5,3,1,4,7,2,8,9},
                {7,8,1,3,9,2,4,6,5},
                {2,4,9,5,8,6,1,7,3}
            };
            IBoard solvedBoard = new Board(solveddata);
            Assert.Equal(solvedBoard, result.CurrentBoard.Board);

            Assert.NotNull(mv1);
            Assert.NotNull(mv2);
        }
Ejemplo n.º 4
0
        public void CanSolveABoardWithOneMoveRemaining()
        {
            int[,] data = new int[,] {
                {9,6,2,7,1,5,8,3,4},
                {4,7,8,9,6,3,5,1,2},
                {3,1,5,4,2,8,6,9,7},
                {1,2,7,6,5,9,3,4,8},
                {8,9,4,2,3,1,7,5,6},
                {5,3,6,8,7,4,9,2,1},
                {6,5,3,1,4,7,2,8,9},
                {7,8,1,3,9,2,4,6,5},
                {2,4,9,5,8,6,1,7,0}
            };
            var moveFinder = new SimpleMoveFinder();
            var player = new SimplePlayer(moveFinder, new SimpleEvaluator(moveFinder));
            var result = player.SolveBoard(new Board(data));

            int[,] solveddata = new int[,] {
                {9,6,2,7,1,5,8,3,4},
                {4,7,8,9,6,3,5,1,2},
                {3,1,5,4,2,8,6,9,7},
                {1,2,7,6,5,9,3,4,8},
                {8,9,4,2,3,1,7,5,6},
                {5,3,6,8,7,4,9,2,1},
                {6,5,3,1,4,7,2,8,9},
                {7,8,1,3,9,2,4,6,5},
                {2,4,9,5,8,6,1,7,3}
            };
            IBoard solvedBoard = new Board(solveddata);
            Assert.Equal(solvedBoard, result.CurrentBoard.Board);

            Assert.Equal(1, result.MovesPlayed.Count);
            Assert.Equal(3, result.MovesPlayed[0].Value);
            Assert.Equal(8, result.MovesPlayed[0].Row);
            Assert.Equal(8, result.MovesPlayed[0].Column);
        }
Ejemplo n.º 5
0
            public void WillReturnEmptyListCellHasAValue()
            {
                int[,] data = {
                {9,0,0, 0,0,5, 6,8,1 },
                {0,6,0, 2,8,0, 7,0,0 },
                {0,0,0, 0,0,6, 9,0,5 },
                {0,8,0, 0,0,2, 0,4,6 },
                {0,0,5, 0,0,0, 3,0,0 },
                {1,9,0, 5,0,0, 0,7,0 },
                {8,0,2, 9,0,0, 0,0,0 },
                {0,0,9, 0,2,7, 0,6,0 },
                {6,7,4, 8,0,0, 0,0,3 }
                };

                IBoardCells boardCells = new BoardCells(new Board(data));
                SimpleMoveFinder moveFinder = new SimpleMoveFinder();

                var cellMoves = moveFinder.GetMovesForCell(boardCells, 0, 0);
                Assert.Equal(0, cellMoves.Moves.Count);

                cellMoves = moveFinder.GetMovesForCell(boardCells, 8, 8);
                Assert.Equal(0, cellMoves.Moves.Count);
            }
Ejemplo n.º 6
0
            public void WilLReturnMoves()
            {
                int[,] data = {
                {9,0,0, 0,0,5, 6,8,1 },
                {0,6,0, 2,8,0, 7,0,0 },
                {0,0,0, 0,0,6, 9,0,5 },
                {0,8,0, 0,0,2, 0,4,6 },
                {0,0,5, 0,0,0, 3,0,0 },
                {1,9,0, 5,0,0, 0,7,0 },
                {8,0,2, 9,0,0, 0,0,0 },
                {0,0,9, 0,2,7, 0,6,0 },
                {6,7,4, 8,0,0, 0,0,3 }
                };

                IBoardCells boardCells = new BoardCells(new Board(data));
                SimpleMoveFinder moveFinder = new SimpleMoveFinder();

                var cellMoves = moveFinder.GetMovesForCell(boardCells, 0, 1);
                // 2,3,4
                int[] expectedValues = new int[] { 2, 3, 4 };
                Assert.Equal(expectedValues.Length, cellMoves.Moves.Count);

                foreach (IMove move in cellMoves.Moves) {
                    Assert.True(expectedValues.Contains(move.Value));
                }

                cellMoves = moveFinder.GetMovesForCell(boardCells, 8, 7);
                expectedValues = new int[] { 1, 2, 5, 9 };
                // 1,2,5,9
                Assert.Equal(4, cellMoves.Moves.Count);
                foreach (IMove move in cellMoves.Moves) {
                    Assert.True(expectedValues.Contains(move.Value));
                }
            }
Ejemplo n.º 7
0
        public void CanSolveADiabolicalBoard01()
        {
            IBoard board = new Board("...7.4..5.2..1..7.....8...2.9...625.6...7...8.532...1.4...9.....3..6..9.2..4.7...");
            var moveFinder = new SimpleMoveFinder();
            var player = new SimplePlayer(moveFinder, new SimpleEvaluator(moveFinder));
            var result = player.SolveBoard(board);

            IBoard solvedBoard = new Board("981724365324615879765983142197836254642571938853249716476398521538162497219457683");
            Assert.Equal(solvedBoard, result.CurrentBoard.Board);
        }
Ejemplo n.º 8
0
        public void WillReturnEmptyListWhenTheBoardIsAlreadySolved()
        {
            int[,] data = new int[,] {
                {9,6,2,7,1,5,8,3,4},
                {4,7,8,9,6,3,5,1,2},
                {3,1,5,4,2,8,6,9,7},
                {1,2,7,6,5,9,3,4,8},
                {8,9,4,2,3,1,7,5,6},
                {5,3,6,8,7,4,9,2,1},
                {6,5,3,1,4,7,2,8,9},
                {7,8,1,3,9,2,4,6,5},
                {2,4,9,5,8,6,1,7,3}
            };
            var moveFinder = new SimpleMoveFinder();
            var player = new SimplePlayer(moveFinder, new SimpleEvaluator(moveFinder));
            var result = player.SolveBoard(new Board(data));

            int[,] solveddata = new int[,] {
                {9,6,2,7,1,5,8,3,4},
                {4,7,8,9,6,3,5,1,2},
                {3,1,5,4,2,8,6,9,7},
                {1,2,7,6,5,9,3,4,8},
                {8,9,4,2,3,1,7,5,6},
                {5,3,6,8,7,4,9,2,1},
                {6,5,3,1,4,7,2,8,9},
                {7,8,1,3,9,2,4,6,5},
                {2,4,9,5,8,6,1,7,3}
            };
            IBoard solvedBoard = new Board(solveddata);
            Assert.Equal(solvedBoard, result.CurrentBoard.Board);

            Assert.Equal(0, result.MovesPlayed.Count);
        }
Ejemplo n.º 9
0
        public void CanSolveASimpleBoard()
        {
            IBoard board = new Board("8..3......9.....7...3584...4...9...2...4.7...78...1..5..96...2.....5..31........6");
            var moveFinder = new SimpleMoveFinder();
            var player = new SimplePlayer(moveFinder, new SimpleEvaluator(moveFinder));
            var result = player.SolveBoard(board);

            IBoard solvedBoard = new Board("812379654594126378673584219431895762925467183786231945159643827267958431348712596");
            Assert.Equal(solvedBoard, result.CurrentBoard.Board);
        }
Ejemplo n.º 10
0
        public void CanSolveAMediumBoard01()
        {
            IBoard board = new Board(".5..8..3.16...5.74...9...6..4..7.1.2.........5.1.6..4..7...8.1.41.7...23.3..1..9.");
            var moveFinder = new SimpleMoveFinder();
            var player = new SimplePlayer(moveFinder, new SimpleEvaluator(moveFinder));
            var result = player.SolveBoard(board);

            IBoard solvedBoard = new Board("954687231168325974327941568643879152792154386581263749279438615415796823836512497");
            Assert.Equal(solvedBoard, result.CurrentBoard.Board);
        }
Ejemplo n.º 11
0
        public void CanSolveAHardBoard03()
        {
            IBoard board = new Board("5.19..6.2.3..2..7..........1.....8...7..4..1...6.....5..........4..9..3.7.3..15.4");
            var moveFinder = new SimpleMoveFinder();
            var player = new SimplePlayer(moveFinder, new SimpleEvaluator(moveFinder));
            var result = player.SolveBoard(board);

            IBoard solvedBoard = new Board("581937642439625178267814953154369827978542316326178495612453789845796231793281564");
            Assert.Equal(solvedBoard, result.CurrentBoard.Board);
        }
Ejemplo n.º 12
0
        public void CanSolveAHardBoard02()
        {
            IBoard board = new Board("..15.....4......7..6..9.1..3....15...9..6...8..57...4..8.1....2..3....5......26..");
            var moveFinder = new SimpleMoveFinder();
            var player = new SimplePlayer(moveFinder, new SimpleEvaluator(moveFinder));
            var result = player.SolveBoard(board);

            IBoard solvedBoard = new Board("931576824452813976867294135328941567794365218615728349586137492243689751179452683");
            Assert.Equal(solvedBoard, result.CurrentBoard.Board);
        }
Ejemplo n.º 13
0
        public void CanSolveAHardBoard01()
        {
            IBoard board = new Board("...........3......6.1.9.4....2.1.9...9.42.1....79..32..36.48..98.....71.2.9.7...3");
            var moveFinder = new SimpleMoveFinder();
            var player = new SimplePlayer(moveFinder, new SimpleEvaluator(moveFinder));
            var result = player.SolveBoard(board);

            IBoard solvedBoard = new Board("475381692923764581681592437562813974398427165147956328736148259854239716219675843");
            Assert.Equal(solvedBoard, result.CurrentBoard.Board);
        }
Ejemplo n.º 14
0
 public HomeController()
 {
     var finder = new SimpleMoveFinder();
     Player = new SimplePlayer(finder, new SimpleEvaluator(finder));
 }