Advertisement
Guest User

Untitled

a guest
Feb 28th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.07 KB | None | 0 0
  1.  
  2. def five_eval(cards):
  3.     assert len(cards) == 5
  4.     ranks = sorted([c[0] for c in cards])
  5.     suits = sorted([c[1] for c in cards])
  6.     # check if is straight
  7.     straight = -1
  8.     if ranks == [0,1, 2,3, RANKS_NUMBER-1]:
  9.         straight = 3
  10.     for i in range(4, RANKS_NUMBER):
  11.         if ranks == [i-4,i-3,i-2,i-1,i]:
  12.             straight = 4
  13.     # check if is flush
  14.     flush = suits[0] == suits[4]
  15.     rank_counts = [0]*RANKS_NUMBER
  16.     for r in ranks:
  17.         rank_counts[r] += 1
  18.    
  19.     #straight-flush
  20.     if straight > 0 and flush:
  21.         return (STRAIGHT_FLUSH + straight, "STRAIGHT_FLUSH %s high" % RANKS[straight])
  22.     #quads
  23.    
  24.     if 4 in rank_counts:
  25.         main_rank = ranks[2]
  26.         for i in range(4):
  27.             ranks.remove(main_rank)
  28.         remaining_rank = ranks[0]
  29.            
  30.         return (
  31.                 FOUR_OF_A_KIND + rank_value(main_rank, remaining_rank),
  32.                 "4 of a kind %s with %s kicker" % (RANKS[main_rank], RANKS[remaining_rank])
  33.             )
  34.     #FH
  35.     if 2 in rank_counts and 3 in rank_counts:
  36.         main_rank = ranks[2]
  37.         for i in range(3):
  38.             ranks.remove(main_rank)
  39.         remaining_rank = ranks[0]
  40.         return (
  41.                 FULL_HOUSE + rank_value(main_rank, remaining_rank),
  42.                 "Fullhouse %s full of %s" % (RANKS[main_rank], RANKS[remaining_rank])
  43.             )
  44.     #flush
  45.     if flush:
  46.         string_result = "Flush "
  47.         for i in reversed(ranks):
  48.             string_result += RANKS[i]
  49.         return (
  50.             FLUSH + rank_value(*reversed(ranks)),
  51.             string_result
  52.         )
  53.     #trips
  54.     if 3 in rank_counts:
  55.         main_rank = ranks[2]
  56.         for i in range(3):
  57.             ranks.remove(main_rank)
  58.         #remaining ranks are in ranks
  59.         return (
  60.                 TRIPS + rank_value(main_rank, ranks[1], ranks[0]),
  61.                 "Trips %s kicked with %s%s" % (RANKS[main_rank], RANKS[ranks[1]], RANKS[ranks[0]])
  62.             )
  63.     #two pair
  64.     if rank_counts.count(2) == 2:
  65.         top_pair = ranks[3]
  66.         bottom_pair = ranks[1]
  67.         for i in range(2):
  68.             ranks.remove(top_pair)
  69.             ranks.remove(bottom_pair)
  70.         #remaining ranks are in ranks
  71.         return (
  72.                 TWO_PAIR + rank_value(top_pair, bottom_pair, ranks[0]),
  73.                 "Two pair %s and %s kicked with %s" % (RANKS[top_pair], RANKS[bottom_pair], RANKS[ranks[0]])
  74.             )
  75.     #one pair
  76.     if 2 in rank_counts:
  77.         top_pair = rank_counts.index(2)
  78.         for i in range(2):
  79.             ranks.remove(top_pair)
  80.         #remaining ranks are in ranks
  81.         return (
  82.                 ONE_PAIR + rank_value(top_pair, *reversed(ranks)),
  83.                 "One pair %s kicked with %s%s%s" % (RANKS[top_pair], RANKS[ranks[2]], RANKS[ranks[1]], RANKS[ranks[0]])
  84.             )
  85.     #high card
  86.     result = 0
  87.     string_result = "High card "
  88.     for i in reversed(ranks):
  89.         string_result += RANKS[i]
  90.     return (
  91.         HIGH_CARD + rank_value(*reversed(ranks)),
  92.         string_result
  93.         )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement