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 }
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); }
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); }
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); }
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); }
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)); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public HomeController() { var finder = new SimpleMoveFinder(); Player = new SimplePlayer(finder, new SimpleEvaluator(finder)); }