Esempio n. 1
0
        public void Part1(string filename, long expected)
        {
            var parser = new Parser(filename);
            var decks  = parser.Parse(new DeckFactory()).Where(c => c != null);
            var sut    = new CombatGame();
            var actual = sut.Play(decks.First(), decks.Last());

            Assert.Equal(expected, actual);
        }
Esempio n. 2
0
        private static void Part2()
        {
            Console.WriteLine("   Part 2");
            string[] lines = File.ReadAllLines(Part2Input);
            Console.WriteLine("\tRead {0} inputs", lines.Length);
            Queue <int> Player1 = new Queue <int>();
            Queue <int> Player2 = new Queue <int>();


            Queue <int> activeQueue = Player1;

            for (int x = 1; x < lines.Length; x++)
            {
                if (lines[x] == "")
                {
                    x           = x + 1;
                    activeQueue = Player2;
                }
                else
                {
                    activeQueue.Enqueue(int.Parse(lines[x]));
                }
            }

            //	Console.WriteLine($"\t Player 1: {Utility.QueueToStringLine(Player1)}");

            //	Console.WriteLine($"\t Player 2: {Utility.QueueToStringLine(Player2)}");


            CombatGame game   = new CombatGame(Player1, Player2);
            Winner     winner = game.PlayUntilWin();


            int         answer = 0;
            Queue <int> winning_player_hand;

            if (winner == Winner.Player_1)
            {
                winning_player_hand = game.Player1;
            }
            else
            {
                winning_player_hand = game.Player2;
            }

            int[] cards_r_a = winning_player_hand.Reverse().ToArray();

            for (int x = 0; x < cards_r_a.Length; x++)
            {
                answer += (x + 1) * cards_r_a[x];
            }

            String final_result = answer.ToString();

            Console.WriteLine($"\n\tPart 2 Solution: {final_result}");
        }
Esempio n. 3
0
        public void Part2(string filename, long expected)
        {
            var parser = new Parser(filename);
            var decks  = parser.Parse(new DeckFactory()).Where(c => c != null);
            var sut    = new CombatGame();

            var(p1, p2) = sut.PlayRecursive(decks.First(), decks.Last());
            var actual = p1.HasCards() ? p1.Score() : p2.Score();

            Assert.Equal(expected, actual);
        }
Esempio n. 4
0
        public void Part2Test()
        {
            // Given
            var game = CombatGame.Parse(Input.Get(22));

            // When
            game.PlayRecursive();

            // Then
            Assert.Equal(291, CombatGame.GetScore(game.Player1Deck) + CombatGame.GetScore(game.Player2Deck));
        }
Esempio n. 5
0
 public void Then_the_score_for_the_winner_of_recursive_game_is_correct()
 {
     Assert.That(CombatGame.PlayRecursiveGameAndReturnWinner(Player1.Clone(), Player2.Clone(), 1).Score(), Is.EqualTo(291));
 }
Esempio n. 6
0
 public void Then_the_score_for_the_winner_of_vanilla_game_is_correct()
 {
     Assert.That(CombatGame.PlayGameAndReturnWinner(Player1.Clone(), Player2.Clone()).Score(), Is.EqualTo(306));
 }
Esempio n. 7
0
            public Winner PlayUntilWin()
            {
                while ((Player1.Count > 0) && (Player2.Count > 0))
                {
                    if (SeenHandsPlayer1.Contains(FlatJoinString(Player1)) ||
                        SeenHandsPlayer2.Contains(FlatJoinString(Player2)))
                    {
                        // default to player 1
                        return(Winner.Player_1);
                    }

                    SeenHandsPlayer1.Add(FlatJoinString(Player1));
                    SeenHandsPlayer2.Add(FlatJoinString(Player2));

                    int p1_card = Player1.Dequeue();
                    int p2_card = Player2.Dequeue();



                    if (Player1.Count >= p1_card && Player2.Count >= p2_card)
                    {
                        Queue <int> player1_new_hand = new Queue <int>(Player1.Take(p1_card));
                        Queue <int> player2_new_hand = new Queue <int>(Player2.Take(p2_card));

                        CombatGame new_game;
                        new_game = new CombatGame(player1_new_hand, player2_new_hand);
                        Winner winner = new_game.PlayUntilWin();

                        if (winner == Winner.Player_1)
                        {
                            Player1.Enqueue(p1_card);
                            Player1.Enqueue(p2_card);
                            continue;
                        }
                        else
                        {
                            Player2.Enqueue(p2_card);
                            Player2.Enqueue(p1_card);
                            continue;
                        }
                    }


                    if (p1_card > p2_card)
                    {
                        Player1.Enqueue(p1_card);
                        Player1.Enqueue(p2_card);
                    }
                    else
                    {
                        Player2.Enqueue(p2_card);
                        Player2.Enqueue(p1_card);
                    }
                }
                if (Player1.Count > 0)
                {
                    return(Winner.Player_1);
                }
                else
                {
                    return(Winner.Player_2);
                }
            }