def calculate_hand_ranking(hand): if StraightFlushVerifier.verify_hand_ranking(hand): return StraightFlushCalculator.calculate_hand_ranking(hand) else: if FourOfAKindVerifier.verify_hand_ranking(hand): return FourOfAKindCalculator.calculate_hand_ranking(hand) else: if FullHouseVerifier.verify_hand_ranking(hand): return FullHouseCalculator.calculate_hand_ranking(hand) else: if FlushVerifier.verify_hand_ranking(hand): return FlushCalculator.calculate_hand_ranking(hand) else: if StraightVerifier.verify_hand_ranking(hand): return StraightCalculator.calculate_hand_ranking(hand) else: if ThreeOfAKindVerifier.verify_hand_ranking(hand): return ThreeOfAKindCalculator.calculate_hand_ranking(hand) else: if TwoPairVerifier.verify_hand_ranking(hand): return TwoPairCalculator.calculate_hand_ranking(hand) else: if OnePairVerifier.verify_hand_ranking(hand): return OnePairCalculator.calculate_hand_ranking(hand) else: if HighCardVerifier.verify_hand_ranking(hand): return HighCardCalculator.calculate_hand_ranking(hand) else: raise RuntimeError("unknown hand ranking")
def calculate_hand_ranking(hand): if FourOfAKindVerifier.verify_hand_ranking(hand): card_values = [card.value for card in hand.cards] card_counter = Counter(card_values) if 4 == card_counter[card_values[0]]: four_of_a_kind_value = card_values[0] kicker = [card.value for card in hand.cards if card.value != four_of_a_kind_value][0] else: four_of_a_kind_value = card_values[1] kicker = card_values[0] return FourOfAKind(four_of_a_kind_value, kicker) else: raise RuntimeError("hand is not four of a kind")
def test_expected(self): four_of_a_kind_hand = Hand( [ Two(Suit.Clubs), Two(Suit.Diamonds), Two(Suit.Hearts), Two(Suit.Spades), Ace(Suit.Spades) ] ) self.assertTrue(FourOfAKindVerifier.verify_hand_ranking(four_of_a_kind_hand)) not_four_of_a_kind_hand = Hand( [ Two(Suit.Clubs), Two(Suit.Spades), Two(Suit.Hearts), Three(Suit.Hearts), Four(Suit.Hearts) ] ) self.assertFalse(FourOfAKindVerifier.verify_hand_ranking(not_four_of_a_kind_hand))