コード例 #1
0
        /// <summary>
        /// https://adventofcode.com/2020/day/22#part2
        /// </summary>
        public static void Part2()
        {
            var game = CombatGame.Parse(Input.Get(22));

            game.PlayRecursive();

            Console.WriteLine(CombatGame.GetScore(game.Player1Deck) + CombatGame.GetScore(game.Player2Deck));
        }
コード例 #2
0
ファイル: Q22.cs プロジェクト: tomekhotdog/AdventOfCode
        internal static RoundResult PlayGame(Deck p1Deck, Deck p2Deck, bool recursiveGame = false, bool calculateScore = false)
        {
            var game = new CombatGame(p1Deck, p2Deck, recursiveGame);

            while (!game.GameIsOver)
            {
                game.PlayRound();
            }
            return(game.GetRoundResult(calculateScore));
        }
コード例 #3
0
        public void MoveRecursive()
        {
            var p1 = Player1Deck.Dequeue();
            var p2 = Player2Deck.Dequeue();

            if (p1 <= Player1Deck.Count && p2 <= Player2Deck.Count)
            {
                var subGame = new CombatGame(new Queue <int>(Player1Deck.Take(p1)), new Queue <int>(Player2Deck.Take(p2)));
                subGame.PlayRecursive();
                if (!subGame.Player2Deck.Any())
                {
                    Player1Deck.Enqueue(p1);
                    Player1Deck.Enqueue(p2);
                }
                else if (!subGame.Player1Deck.Any())
                {
                    Player2Deck.Enqueue(p2);
                    Player2Deck.Enqueue(p1);
                }
                else
                {
                    throw new NotImplementedException();
                }
            }
            else
            {
                if (p1 > p2)
                {
                    Player1Deck.Enqueue(p1);
                    Player1Deck.Enqueue(p2);
                }
                else if (p2 > p1)
                {
                    Player2Deck.Enqueue(p2);
                    Player2Deck.Enqueue(p1);
                }
                else
                {
                    throw new NotImplementedException();
                }
            }
        }