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
|
# return str(self) == str(other) # Alternative comparison method
|
||||||
|
|
||||||
# Other utility functions for hand evaluation
|
# 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:
|
def get_rank_counts(ranks: List[int]) -> Counter:
|
||||||
return Counter(ranks)
|
return Counter(ranks)
|
||||||
|
|
||||||
@ -48,32 +63,32 @@ def evaluate_hand(hand: List[Card]) -> Tuple[int, List[int]]:
|
|||||||
flush = is_flush(suits)
|
flush = is_flush(suits)
|
||||||
|
|
||||||
if flush and ranks == [14, 13, 12, 11, 10]:
|
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:
|
if flush and straight:
|
||||||
return (8, ranks) # Straight Flush
|
return (8, hand_rank_name(8), ranks) # Straight Flush
|
||||||
if 4 in rank_counts.values():
|
if 4 in rank_counts.values():
|
||||||
four = max(rank for rank, count in rank_counts.items() if count == 4)
|
four = max(rank for rank, count in rank_counts.items() if count == 4)
|
||||||
kicker = max(rank for rank in ranks if rank != four)
|
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():
|
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)
|
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)
|
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:
|
if flush:
|
||||||
return (5, ranks) # Flush
|
return (5, hand_rank_name(5), ranks) # Flush
|
||||||
if straight:
|
if straight:
|
||||||
return (4, ranks) # Straight
|
return (4, hand_rank_name(4), ranks) # Straight
|
||||||
if 3 in rank_counts.values():
|
if 3 in rank_counts.values():
|
||||||
three = max(rank for rank, count in rank_counts.items() if count == 3)
|
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)
|
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:
|
if list(rank_counts.values()).count(2) == 2:
|
||||||
pairs = sorted([rank for rank, count in rank_counts.items() if count == 2], reverse=True)
|
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)
|
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():
|
if 2 in rank_counts.values():
|
||||||
pair = max(rank for rank, count in rank_counts.items() if count == 2)
|
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)
|
kickers = sorted([rank for rank in ranks if rank != pair], reverse=True)
|
||||||
return (1, [pair]*2 + kickers) # One Pair
|
return (1, hand_rank_name(1), [pair]*2 + kickers) # One Pair
|
||||||
return (0, ranks) # High Card
|
return (0, hand_rank_name(0), ranks) # High Card
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user