SHARE
TWEET

EucherHands.py

TTTPPP Nov 6th, 2012 79 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from random import *
  2.  
  3. def rank(x):
  4.         return x%6
  5. def colour(x):
  6.         return (x/12)
  7. def suit(x):
  8.         return (x/6)
  9.  
  10. def jack(x):
  11.         return (rank(x) == 2)
  12. def sameSuit(x,y):
  13.         return suit(x) == suit(y)
  14. def sameColour(x,y):
  15.         return colour(x) == colour(y)
  16.  
  17. def s1(H):
  18.         jacks = [0,0]
  19.         non = [0,0,0,0]
  20.         colours = [0,0]
  21.         for h in H:
  22.                 if jack(h):
  23.                         jacks[colour(h)]+=1
  24.                 else:
  25.                         non[suit(h)]+=1
  26.                 colours[colour(h)]+=1
  27.         if set(jacks) == set([0,2]) and set(non) == set([0,3]) and set(colours) == set([0,5]):
  28.                 return True
  29.         return False
  30.  
  31. def s2(H,D):
  32.         if s1(H):
  33.                 return False
  34.         for h in H:
  35.                 # Can we replace h with a card from D and get s1?
  36.                 partialHand = H.difference(set([h]))
  37.                 for d in D:
  38.                         hand = partialHand.union(set([d]))
  39.                         if s1(hand):
  40.                                 return True
  41.         return False
  42.  
  43. def s3(H):
  44.         jacks = 0
  45.         for h in H:
  46.                 if jack(h):
  47.                         jacks += 1
  48.         if jacks == 4:
  49.                 return True
  50.         return False
  51.  
  52. repeats = 1000000
  53. for z in range(10):
  54.         s1Count = 0
  55.         s2Count = 0
  56.         s3Count = 0
  57.         for j in range(repeats):
  58.                 D = set(range(24))
  59.  
  60.                 h = []
  61.                 for i in range(4):
  62.                         h.append(set(sample(D, 5)))
  63.                         D.difference_update(h[-1])
  64.  
  65.                 got1 = False
  66.                 got2 = False
  67.                 got3 = False
  68.                 #All hands tested per deal
  69.                 #for hand in h:
  70.                 #One hand tested per deal
  71.                 for hand in h[:1]:
  72.                         got1 = got1 or s1(hand)
  73.                         got2 = got2 or s2(hand, D)
  74.                         got3 = got3 or s3(hand)
  75.                 if got1:
  76.                         s1Count += 1
  77.                 if got2:
  78.                         s2Count += 1
  79.                 if got3:
  80.                         s3Count += 1
  81.  
  82.         print s1Count*100.0/repeats, s2Count*100.0/repeats, s3Count*100.0/repeats
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top