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); }
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}"); }
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); }
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)); }
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)); }
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)); }
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); } }