예제 #1
0
        internal static long Part1(string input)
        {
            string[]   lines = input.Split('\n');
            PlayerDeck p1    = new PlayerDeck();
            PlayerDeck p2    = new PlayerDeck();

            bool playerone = true;

            foreach (string ln in lines)
            {
                if (int.TryParse(ln, out int v))
                {
                    if (playerone)
                    {
                        p1.cards.Enqueue(v);
                    }
                    else
                    {
                        p2.cards.Enqueue(v);
                    }
                }
                else if (ln == "")
                {
                    playerone = false;
                }
            }
            do
            {
                int card1 = p1.cards.Dequeue();
                int card2 = p2.cards.Dequeue();
                if (card1 > card2)
                {
                    p1.GainCards(card1, card2);
                }
                else
                {
                    p2.GainCards(card2, card1);
                }
            } while(!GameOver(p1, p2));
            int score = 0;

            if (p1.cards.Count == 0)
            {
                while (p2.cards.Count > 0)
                {
                    score += p2.cards.Count * p2.cards.Dequeue();
                }
            }
            else
            {
                while (p1.cards.Count > 0)
                {
                    score += p1.cards.Count * p1.cards.Dequeue();
                }
            }
            return(score);
        }
예제 #2
0
            public bool GetWinner()
            {
                while (!GameOver(p1, p2))
                {
                    if (CheckInfinite(p1, p2))
                    {
                        return(true);
                    }
                    int card1 = p1.cards.Dequeue();
                    int card2 = p2.cards.Dequeue();

                    if (card1 <= p1.cards.Count && card2 <= p2.cards.Count)
                    {
                        GameClass gc = new GameClass(p1, card1, p2, card2);
                        if (gc.GetWinner())
                        {
                            p1.GainCards(card1, card2);
                        }
                        else
                        {
                            p2.GainCards(card2, card1);
                        }
                        continue;
                    }

                    if (card1 > card2)
                    {
                        p1.GainCards(card1, card2);
                    }
                    else
                    {
                        p2.GainCards(card2, card1);
                    }
                }

                return(p2.cards.Count == 0);                //true => player 1 wins
            }