Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def five_eval(cards):
- assert len(cards) == 5
- ranks = sorted([c[0] for c in cards])
- suits = sorted([c[1] for c in cards])
- # check if is straight
- straight = -1
- if ranks == [0,1, 2,3, RANKS_NUMBER-1]:
- straight = 3
- for i in range(4, RANKS_NUMBER):
- if ranks == [i-4,i-3,i-2,i-1,i]:
- straight = 4
- # check if is flush
- flush = suits[0] == suits[4]
- rank_counts = [0]*RANKS_NUMBER
- for r in ranks:
- rank_counts[r] += 1
- #straight-flush
- if straight > 0 and flush:
- return (STRAIGHT_FLUSH + straight, "STRAIGHT_FLUSH %s high" % RANKS[straight])
- #quads
- if 4 in rank_counts:
- main_rank = ranks[2]
- for i in range(4):
- ranks.remove(main_rank)
- remaining_rank = ranks[0]
- return (
- FOUR_OF_A_KIND + rank_value(main_rank, remaining_rank),
- "4 of a kind %s with %s kicker" % (RANKS[main_rank], RANKS[remaining_rank])
- )
- #FH
- if 2 in rank_counts and 3 in rank_counts:
- main_rank = ranks[2]
- for i in range(3):
- ranks.remove(main_rank)
- remaining_rank = ranks[0]
- return (
- FULL_HOUSE + rank_value(main_rank, remaining_rank),
- "Fullhouse %s full of %s" % (RANKS[main_rank], RANKS[remaining_rank])
- )
- #flush
- if flush:
- string_result = "Flush "
- for i in reversed(ranks):
- string_result += RANKS[i]
- return (
- FLUSH + rank_value(*reversed(ranks)),
- string_result
- )
- #trips
- if 3 in rank_counts:
- main_rank = ranks[2]
- for i in range(3):
- ranks.remove(main_rank)
- #remaining ranks are in ranks
- return (
- TRIPS + rank_value(main_rank, ranks[1], ranks[0]),
- "Trips %s kicked with %s%s" % (RANKS[main_rank], RANKS[ranks[1]], RANKS[ranks[0]])
- )
- #two pair
- if rank_counts.count(2) == 2:
- top_pair = ranks[3]
- bottom_pair = ranks[1]
- for i in range(2):
- ranks.remove(top_pair)
- ranks.remove(bottom_pair)
- #remaining ranks are in ranks
- return (
- TWO_PAIR + rank_value(top_pair, bottom_pair, ranks[0]),
- "Two pair %s and %s kicked with %s" % (RANKS[top_pair], RANKS[bottom_pair], RANKS[ranks[0]])
- )
- #one pair
- if 2 in rank_counts:
- top_pair = rank_counts.index(2)
- for i in range(2):
- ranks.remove(top_pair)
- #remaining ranks are in ranks
- return (
- ONE_PAIR + rank_value(top_pair, *reversed(ranks)),
- "One pair %s kicked with %s%s%s" % (RANKS[top_pair], RANKS[ranks[2]], RANKS[ranks[1]], RANKS[ranks[0]])
- )
- #high card
- result = 0
- string_result = "High card "
- for i in reversed(ranks):
- string_result += RANKS[i]
- return (
- HIGH_CARD + rank_value(*reversed(ranks)),
- string_result
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement