/// <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)); }
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)); }
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(); } } }