public void SolvePartTwo() { var game = new RecursiveCombatGame(initialDeal[P1], initialDeal[P2]); game.PlayUntilFinished(); var winningScore = game.GetWinnersScore(); Console.WriteLine(winningScore); }
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); }
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); }