Moved hand_rank_name to hand_utils.py
This commit is contained in:
parent
689ac58a7d
commit
8dd2abb38c
@ -20,6 +20,21 @@ class Card:
|
||||
# return str(self) == str(other) # Alternative comparison method
|
||||
|
||||
# Other utility functions for hand evaluation
|
||||
def hand_rank_name(rank: int) -> str:
|
||||
names = {
|
||||
9: "Royal Flush",
|
||||
8: "Straight Flush",
|
||||
7: "Four of a Kind",
|
||||
6: "Full House",
|
||||
5: "Flush",
|
||||
4: "Straight",
|
||||
3: "Three of a Kind",
|
||||
2: "Two Pair",
|
||||
1: "One Pair",
|
||||
0: "High Card"
|
||||
}
|
||||
return names.get(rank, "Unknown Hand")
|
||||
|
||||
def get_rank_counts(ranks: List[int]) -> Counter:
|
||||
return Counter(ranks)
|
||||
|
||||
@ -48,32 +63,32 @@ def evaluate_hand(hand: List[Card]) -> Tuple[int, List[int]]:
|
||||
flush = is_flush(suits)
|
||||
|
||||
if flush and ranks == [14, 13, 12, 11, 10]:
|
||||
return (9, ranks) # Royal Flush
|
||||
return (9, hand_rank_name(9), ranks) # Royal Flush
|
||||
if flush and straight:
|
||||
return (8, ranks) # Straight Flush
|
||||
return (8, hand_rank_name(8), ranks) # Straight Flush
|
||||
if 4 in rank_counts.values():
|
||||
four = max(rank for rank, count in rank_counts.items() if count == 4)
|
||||
kicker = max(rank for rank in ranks if rank != four)
|
||||
return (7, [four]*4 + [kicker]) # Four of a Kind
|
||||
return (7, hand_rank_name(7), [four]*4 + [kicker]) # Four of a Kind
|
||||
if 3 in rank_counts.values() and 2 in rank_counts.values():
|
||||
three = max(rank for rank, count in rank_counts.items() if count == 3)
|
||||
pair = max(rank for rank, count in rank_counts.items() if count == 2)
|
||||
return (6, [three]*3 + [pair]*2) # Full House
|
||||
return (6, hand_rank_name(6), [three]*3 + [pair]*2) # Full House
|
||||
if flush:
|
||||
return (5, ranks) # Flush
|
||||
return (5, hand_rank_name(5), ranks) # Flush
|
||||
if straight:
|
||||
return (4, ranks) # Straight
|
||||
return (4, hand_rank_name(4), ranks) # Straight
|
||||
if 3 in rank_counts.values():
|
||||
three = max(rank for rank, count in rank_counts.items() if count == 3)
|
||||
kickers = sorted([rank for rank in ranks if rank != three], reverse=True)
|
||||
return (3, [three]*3 + kickers) # Three of a Kind
|
||||
return (3, hand_rank_name(3), [three]*3 + kickers) # Three of a Kind
|
||||
if list(rank_counts.values()).count(2) == 2:
|
||||
pairs = sorted([rank for rank, count in rank_counts.items() if count == 2], reverse=True)
|
||||
kicker = max(rank for rank in ranks if rank not in pairs)
|
||||
return (2, pairs*2 + [kicker]) # Two Pair
|
||||
return (2, hand_rank_name(2), pairs*2 + [kicker]) # Two Pair
|
||||
if 2 in rank_counts.values():
|
||||
pair = max(rank for rank, count in rank_counts.items() if count == 2)
|
||||
kickers = sorted([rank for rank in ranks if rank != pair], reverse=True)
|
||||
return (1, [pair]*2 + kickers) # One Pair
|
||||
return (0, ranks) # High Card
|
||||
return (1, hand_rank_name(1), [pair]*2 + kickers) # One Pair
|
||||
return (0, hand_rank_name(0), ranks) # High Card
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user