예제 #1
0
    def test_autocombat(self):
        parser = day22.PuzzleParser(test_input_dir / "day22_test_input.txt")
        card_player = day22.AutoCombat(*parser.decks)
        card_player.play_game()
        # after a game player 1 should have no cards and player 2 should have all
        expected_cards = [3, 2, 10, 6, 8, 5, 9, 4, 7, 1]
        for expected, actual in zip(expected_cards, card_player.decks[1]):
            self.assertEqual(expected, actual)

        self.assertEqual(card_player.winner, 2)
예제 #2
0
    def test_parser(self):
        parser = day22.PuzzleParser(test_input_dir / "day22_test_input.txt")
        deck1, deck2 = parser.decks
        expected_cards = [9, 2, 6, 3, 1]
        for expected, actual in zip(expected_cards, deck1):
            self.assertEqual(expected, actual)

        expected_cards = [5, 8, 4, 7, 10]
        for expected, actual in zip(expected_cards, deck2):
            self.assertEqual(expected, actual)
예제 #3
0
    def test_recursive_combat(self):
        parser = day22.PuzzleParser(test_input_dir / "day22_test_input.txt")
        card_player = day22.RecursiveCombat(*parser.decks, verbose=True)
        [card_player.turn() for _ in range(8)
         ]  # play the first 8 turns because nothing eventful happens
        card_player.turn(
        )  # this turn should trigger recusion and P2 should win
        expected_p2 = [10, 1, 7, 6, 3, 4]
        for expected, actual in zip(expected_p2, card_player.decks[1]):
            self.assertEqual(expected, actual)

        # now play out the rest of the game
        card_player.play_game()
        self.assertEqual(card_player.winner, 2)
        self.assertEqual(card_player.calculate_scores()[1], 291)
예제 #4
0
 def test_part2(self):
     parser = day22.PuzzleParser(test_input_dir / "day22_test_input.txt")
     high_score = day22.part2(parser)
     self.assertEqual(high_score, 291)
예제 #5
0
 def test_infinite_recusion_prevention(self):
     parser = day22.PuzzleParser(test_input_dir / "day22_test_input2.txt")
     card_player = day22.RecursiveCombat(*parser.decks, verbose=True)
     card_player.play_game()
     self.assertEqual(card_player.winner, 1)