Beispiel #1
0
        public void SolveGame_Legal_9X9_ReturnTrue()
        {
            // Arrange
            // create valid 9 on 9 sudoku Board string
            string testBoard = "500080049" +
                               "000500030" +
                               "067300001" +
                               "150000000" +
                               "000208000" +
                               "000000018" +
                               "700004150" +
                               "030002000" +
                               "490050000";

            // build a Board and gameSolver
            Board      board  = new Board(testBoard, 9);
            GameSolver solver = new GameSolver(board);

            // Act
            // try to solve the sudoku board
            bool solved = solver.SolveGame();

            // Assert - we expect the solver to Solve the sudoku and return true
            Assert.AreEqual(solved, true);
        }
Beispiel #2
0
        public void SolveGame_Unsolvable_9X9_ReturnFalse()
        {
            // Arrange
            // Create valid 9 on 9 sudoku Board
            // this board in unslovable because we have to set '9' in
            // indexes [0,8] and this wiil casue '9' dupliacte in the last col

            string testBoard = "123456780" +
                               "000000000" +
                               "000000000" +
                               "009000000" +
                               "000000000" +
                               "000005000" +
                               "000000000" +
                               "030002009" +
                               "000000000";

            Board      board  = new Board(testBoard, 9);
            GameSolver solver = new GameSolver(board);

            // Act
            bool solved = solver.SolveGame();

            // Assert - The solver needs to try to solve the board
            // without success and return false

            Assert.AreEqual(solved, false);
        }
Beispiel #3
0
        public void FindNeighbors(string seed, int expectedNeighbors)
        {
            var board           = seed.FromString();
            int actualNeighbors = GameSolver.FindNeighborCount(board.First(), board);

            Assert.AreEqual(expectedNeighbors, actualNeighbors);
        }
Beispiel #4
0
        public void SolveGame_Legal_16X16_ReturnTrue()
        {
            // Arrange
            // create valid 16 on 16 sudoku Board
            string testBoard = "0080040000000003" +
                               "0000000000000000" +
                               "@00000=000000000" +
                               "<0000>000?000000" +
                               "07@000000;030000" +
                               "000000>005000;00" +
                               "00000000=0400000" +
                               "0000000000009000" +
                               "0000060800>00007" +
                               ":0;00000@<000000" +
                               "0000000000?00200" +
                               "000000@>00000000" +
                               "00700=0;00000060" +
                               "0000000000000@00" +
                               "0>002@000=000000" +
                               "000100000000=500";

            Board      board  = new Board(testBoard, 16);
            GameSolver solver = new GameSolver(board);

            // Act
            bool solved = solver.SolveGame();

            // Assert
            Assert.AreEqual(solved, true);
        }
Beispiel #5
0
        static void Main()
        {
            Console.WriteLine("Initial State:");

            GameSolver gs = new GameSolver();

            Console.WriteLine(gs.InitialState.DrawState());

            var result = gs.SearchForSolution();

            Console.WriteLine($"Overall moves made: {gs.OverallMoves:N0}");
            Console.WriteLine(result);

            Console.WriteLine();
            Console.WriteLine("Detailed movements:");

            var state = gs.InitialState;

            foreach (var movement in result.MovementsMade)
            {
                Console.WriteLine(movement);
                state = state.Go(movement);
                //TODO: consider refactoring logic of removal matched ids from CheckBoardState
                state.CheckBoardState();
                Console.WriteLine(state.DrawState());
            }

            Console.ReadLine();
        }
Beispiel #6
0
        ////
        //// GET: /Game/

        public JsonResult Index(int bucket1, int bucket2, int target)
        {
            IEnumerable <StateTransition> steps = GameSolver.Solve(bucket1, bucket2, target);

            string result = serializer.Serialize(new { Steps = steps.ToArray(), Message = string.Empty });

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
Beispiel #7
0
        public void SolveBoard(string seed, string result, int numGenerations, string reason)
        {
            var seedBoard      = seed.FromString();
            var expectedResult = result.FromString();

            var actualResult = GameSolver.Solve(seedBoard, numGenerations);

            expectedResult.Should().BeEquivalentTo(actualResult, because: reason);
        }
Beispiel #8
0
        public void SolveCapaCity2and18WithTarget4Returns4Steps()
        {
            int bucket1capacity = 2;
            int bucket2capacity = 18;
            int target          = 4;

            IEnumerable <StateTransition> result = GameSolver.Solve(bucket1capacity, bucket2capacity, target);

            Assert.AreEqual(result.ToList().Count, 4);
        }
Beispiel #9
0
        public void SolveGame_EmptyBoard16X16_ReturnTrue()
        {
            // Arrange
            // create empty 16 on 16 sudoku Board
            string     testBoard = new string('0', 16 * 16);
            Board      board     = new Board(testBoard, 16);
            GameSolver solver    = new GameSolver(board);

            // Act
            bool solved = solver.SolveGame();

            // Assert
            // empty board is solvable board with a lot of solvign options
            // the function should return true
            Assert.AreEqual(solved, true);
        }
Beispiel #10
0
        private void OnSolvePuzzle_Click(object sender, EventArgs e)
        {
            bool couldSolve;

            UIGameBoard.SuspendLayout();
            PuzzleSolution = GameSolver.Solve(UIGameBoard.Board, out couldSolve);
            if (!couldSolve)
            {
                new TooHardBox().ShowDialog();
            }

            CurrentStep = PuzzleSolution.Count;
            ButtonUndoAll_Click(null, null);
            ButtonSolve.Visible = false;
            UpdateRuleButtons();
            UIGameBoard.ResumeLayout(true /*performLayout*/);
        }
Beispiel #11
0
        // [TestCase(SampleGames.GosperGliderGunInitial, gosperGliderGun43rdGen, 43, "Gun is shooting down and to the right")]
        public void SolveJsonBoard(string seed, string result, int numGenerations, string reason)
        {
            var seedBoard      = JsonSerializer.Deserialize <IEnumerable <Coordinate> >(seed);
            var expectedResult = JsonSerializer.Deserialize <IEnumerable <Coordinate> >(result);


            var actualResult = GameSolver.Solve(seedBoard, numGenerations);

            Console.WriteLine();

            Console.WriteLine(JsonSerializer.Serialize(expectedResult));
            Console.WriteLine(JsonSerializer.Serialize(actualResult));

            Console.WriteLine(expectedResult.SequenceEqual(actualResult));

            expectedResult.All(actualResult.Contains).Should().BeTrue(reason);
        }
Beispiel #12
0
        public Game Optimal(OptimalMoveRequest optimalMoveRequest)
        {
            if (optimalMoveRequest.Game.isLastMove())
            {
                return(optimalMoveRequest.Game);
            }
            optimalMoveRequest.Game.InvertBoard();
            Move m = GameSolver.BestMove(
                optimalMoveRequest.BetaCards,
                optimalMoveRequest.AlphaCards,
                optimalMoveRequest.Game);

            optimalMoveRequest.Game.InvertBoard();
            optimalMoveRequest.Game.addCard(m.Card, m.X, m.Y, false);

            return(optimalMoveRequest.Game);
        }
Beispiel #13
0
        public void SolveGame_Legal_4X4_ReturnTrue()
        {
            // Arrange
            // create valid 4 on 4 sudoku Board
            string testBoard = "1234" +
                               "3400" +
                               "2040" +
                               "4002";

            Board      Sudokuboard = new Board(testBoard, 4);
            GameSolver solver      = new GameSolver(Sudokuboard);

            // Act
            bool solved = solver.SolveGame();

            // Assert
            Assert.AreEqual(solved, true);
        }
Beispiel #14
0
        public void SolveGame_SolvedBoard_ReturnTrue()
        {
            // Arrange
            // Create 4 on 4 solved board
            string slovedBoard = "1234" +
                                 "3412" +
                                 "2143" +
                                 "4321";


            Board      board  = new Board(slovedBoard, 4);
            GameSolver solver = new GameSolver(board);

            // Act
            bool solved = solver.SolveGame();

            // Assert
            Assert.AreEqual(solved, true);
        }
        public void SimpleGameCanBeSolved()
        {
            char[] gameField = new char[]
            {
                'w', 'o', 'r',
                'i', 'f', 'k',
                'e', 'l', 'd'
            };
            GameInformation            gameInfo = new GameInformation(gameField, 3, 3);
            ConcurrentWordStateMachine concurrentWordStateMachine = new ConcurrentWordStateMachine();

            concurrentWordStateMachine.AddWords("./Words/English.txt");
            GameSolver   gameSolver = new GameSolver(concurrentWordStateMachine);
            GameSolution solution   = gameSolver.SolveGameAsync(gameInfo).Result;

            Assert.True(solution.IsSolved);

            GameWord[] gameWords = new GameWord[]
            {
                //work
                new GameWord(gameInfo, new GamePoint[]
                {
                    new GamePoint(gameInfo, 0, 0),
                    new GamePoint(gameInfo, 1, 0),
                    new GamePoint(gameInfo, 2, 0),
                    new GamePoint(gameInfo, 2, 1)
                }),
                //field
                new GameWord(gameInfo, new GamePoint[]
                {
                    new GamePoint(gameInfo, 1, 1),
                    new GamePoint(gameInfo, 0, 1),
                    new GamePoint(gameInfo, 0, 2),
                    new GamePoint(gameInfo, 1, 2),
                    new GamePoint(gameInfo, 2, 2)
                })
            };

            GameState expectedGameState = new GameState(gameInfo, gameWords);

            Assert.Contains(expectedGameState, solution.GameStates);
            Assert.Single(solution.GameStates);
        }
Beispiel #16
0
        public void SolveGame_Unsolvable_4X4_ReturnFalse()
        {
            // Arrange
            // Create Legal 4 on 4 sudoku Board
            // this board in unslovable because we have to set '4' in
            // indexes [2,1] and this wiil casue '4' dupliacte in the third row

            string testBoard = "4000" +
                               "0000" +
                               "1042" +
                               "2300";

            Board      Sudokuboard = new Board(testBoard, 4);
            GameSolver solver      = new GameSolver(Sudokuboard);

            // Act
            bool solved = solver.SolveGame();

            // Assert - The solver needs to try to solve the board
            // without success and return false

            Assert.AreEqual(solved, false);
        }
Beispiel #17
0
        static async Task Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("Pass the server address as the 1st parameter.");
                return;
            }

            var server     = args[0];
            var clientName = Environment.UserName;

            if (args.Length > 1)
            {
                clientName = args[1];
            }

            HttpWebResponse response;
            var             timer = Stopwatch.StartNew();

            do
            {
                Console.WriteLine($"Connecting to server @ {server}");
                var request = WebRequest.CreateHttp(server);
                response = (HttpWebResponse)request.GetResponse();
            } while (response.StatusCode != HttpStatusCode.OK && timer.Elapsed.TotalSeconds < 30);
            if (response.StatusCode != HttpStatusCode.OK)
            {
                Console.WriteLine("Server didn't come up.  What's going on?");
                return;
            }

            client = RestService.For <IContestServer>(server);
            var registerRequest = new RegisterRequest {
                Name = clientName
            };
            RegisterResponse registerResponse;

            while (true)
            {
                try
                {
                    registerResponse = await client.Register(registerRequest);

                    break;
                }
                catch
                {
                    registerRequest.Name += "_1";
                }
            }

            token  = registerResponse.Token;
            status = ClientStatus.Waiting;

            UpdateResponse updateResponse = null;

            do
            {
                if (updateResponse != null)
                {
                    Console.WriteLine("Waiting for game to start... {0}", DateTime.Now);
                    Thread.Sleep(TimeSpan.FromSeconds(1));
                }
                updateResponse = await client.Update(new UpdateRequest
                {
                    Token = token
                });
            } while (updateResponse.GameState == GameState.NotStarted);

            var seedBoard = updateResponse.SeedBoard;

            generationsToCompute = updateResponse.GenerationsToCompute ?? 0;
            Console.WriteLine($"Got seed board w/{seedBoard.Count()} live cells counting {generationsToCompute} generations.");

            heartbeatTimer = new Timer(new TimerCallback(heartbeat), state: null, dueTime: 500, period: 500);

            status = ClientStatus.Processing;
            GameSolver.GenerationBatchCompleted += (s, e) => Interlocked.Exchange(ref generationsComputed, e.GenerationsComputed);
            solvedBoard = GameSolver.Solve(seedBoard, generationsToCompute, batchSize: 5);
            status      = ClientStatus.Complete;


            Console.WriteLine("You finished!");
            Console.ReadLine();
        }
Beispiel #18
0
        static void Main(string[] args)
        {
            var gameBordOpt = new GameBoards.GameBoard(9)
            {
                { new GameBoardTag(new Coordinate(9, 8), 6) },
                { new GameBoardTag(new Coordinate(9, 5), 3) },
                { new GameBoardTag(new Coordinate(8, 4), 2) },
                { new GameBoardTag(new Coordinate(8, 5), 7) },

                { new GameBoardTag(new Coordinate(8, 7), 3) },
                { new GameBoardTag(new Coordinate(7, 2), 7) },
                { new GameBoardTag(new Coordinate(7, 4), 9) },
                { new GameBoardTag(new Coordinate(3, 5), 4) },
                { new GameBoardTag(new Coordinate(5, 5), 1) },
                { new GameBoardTag(new Coordinate(5, 7), 6) },
                { new GameBoardTag(new Coordinate(5, 8), 7) },
                { new GameBoardTag(new Coordinate(5, 9), 4) },
                { new GameBoardTag(new Coordinate(9, 1), 4) }
            };

            for (int j = 0; j < 80; j++)
            {
                var gameBoard2  = new GameBoards.GameBoard(9);
                var boardRules  = new NormalSodukoRules();
                var gameCreator = new GameHolder(gameBoard2, 3, boardRules);
                Console.WriteLine("///////////////////////////////");
                gameCreator.LoadGame();



                var gameKey2 = gameCreator.GameBoardGameKeysPair.Keys.ElementAt(0);
                var game2    = gameCreator.GameBoardGameKeysPair.Values.ElementAt(0);

                //Console.Clear();

                Console.WriteLine();
                Console.WriteLine();
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(game2);
                Console.WriteLine(gameKey2);
                Console.ResetColor();
                var solve      = game2.Clone();
                var gameSolver = new GameSolver(game2, boardRules);
                for (int i = 0; i < 1; i++)
                {
                    gameSolver.SolveBoard();

                    var target    = gameSolver.TargetSolutionGameBoards.Keys.ElementAt(i);
                    var solutuion = gameSolver.TargetSolutionGameBoards.Values.ElementAt(i).FirstOrDefault();
                    Console.WriteLine();
                    Console.WriteLine();
                    Console.WriteLine();
                    Console.WriteLine("---------------------------------------");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine(target);
                    Console.WriteLine(solutuion);
                    Console.ResetColor();
                }
            }
            Console.WriteLine("Done!!");
            Console.ReadKey();
        }