Exemplo n.º 1
0
        public void SolvePartTwo()
        {
            var game = new RecursiveCombatGame(initialDeal[P1], initialDeal[P2]);

            game.PlayUntilFinished();
            var winningScore = game.GetWinnersScore();

            Console.WriteLine(winningScore);
        }
Exemplo n.º 2
0
        public void Part2()
        {
            Queue <int> player1 = new Queue <int>();
            Queue <int> player2 = new Queue <int>();

            RecursiveCombatGame game = new RecursiveCombatGame(File.ReadAllLines("Day22Player1.txt").Select(int.Parse), File.ReadAllLines("Day22Player2.txt").Select(int.Parse));

            game.PlayToEnd();

            long result = game.GetFinalScore();

            Assert.Equal(32806, result);
        }
Exemplo n.º 3
0
            public bool PlayToEnd()
            {
                while (player1.Count > 0 && player2.Count > 0)
                {
                    if (!previoushands.Add(ComputeHandString()))
                    {
                        return(true); // Player1 Wins
                    }

                    int p1 = player1.Dequeue();
                    int p2 = player2.Dequeue();

                    bool player1Wins;

                    if (p1 <= player1.Count && p2 <= player2.Count)
                    {
                        player1Wins = new RecursiveCombatGame(player1.Take(p1), player2.Take(p2)).PlayToEnd();
                    }
                    else
                    {
                        player1Wins = (p1 > p2);
                    }

                    if (player1Wins)
                    {
                        player1.Enqueue(p1);
                        player1.Enqueue(p2);
                    }
                    else
                    {
                        player2.Enqueue(p2);
                        player2.Enqueue(p1);
                    }
                }

                return(player1.Count > 0);
            }