Advertisement
Guest User

Han Solo Crew Simulation

a guest
May 15th, 2014
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.98 KB | None | 0 0
  1.  
  2. import random
  3.  
  4. ITERATIONS = 1000000
  5. ATTACK_DICE = 3
  6.  
  7. def merge(d1, d2, merge_fn=lambda x,y:x+y):
  8.     """
  9.    Merges two dictionaries, non-destructively, combining
  10.    values on duplicate keys as defined by the optional merge
  11.    function.
  12.    """
  13.     result = dict(d1)
  14.     for k,v in d2.iteritems():
  15.         if k in result:
  16.             result[k] = merge_fn(result[k], v)
  17.         else:
  18.             result[k] = v
  19.     return result
  20.  
  21. def rollDice(n):
  22.     die_roll = {"c": 0,"h": 0,"f": 0,"m": 0}
  23.     for i in range(n):
  24.         die_roll[random.choice(["m", "m", "h", "h", "h", "c", "f", "f"])] += 1
  25.     return die_roll
  26.    
  27.    
  28. # ##########################
  29. # WITH NO HELP ...
  30.    
  31. print "\nWith nothing to help you..."
  32. results = {"c": 0,"h": 0,"f": 0,"m": 0}
  33.  
  34. for i in range(ITERATIONS):
  35.     results = merge(results, rollDice(ATTACK_DICE))
  36.    
  37. for key in results:
  38.     results[key] = results[key] / float(ITERATIONS)
  39.    
  40. print results
  41. print sum(results.values())
  42.  
  43.  
  44. # ##########################
  45. # WITH A FOCUS ...
  46.  
  47. print "\nWith a focus token..."
  48. results = {"c": 0,"h": 0,"f": 0,"m": 0}
  49.  
  50. for i in range(ITERATIONS):
  51.     result = rollDice(ATTACK_DICE)
  52.     result["h"] += result["f"]
  53.     result["f"] = 0
  54.     results = merge(results, result)
  55.  
  56. for key in results:
  57.     results[key] = results[key] / float(ITERATIONS)
  58.    
  59. print results
  60. print sum(results.values())
  61.  
  62.  
  63. # ##########################
  64. # WITH A TARGET LOCK ...
  65.  
  66. print "\nWith a target lock..."
  67. results = {"c": 0,"h": 0,"f": 0,"m": 0}
  68.  
  69. for i in range(ITERATIONS):
  70.     result = rollDice(ATTACK_DICE)
  71.     misses = result["m"]
  72.     focus = result["f"]
  73.     result["m"] = 0
  74.     result["f"] = 0
  75.     result = merge(result, rollDice(misses + focus))
  76.     results = merge(results, result)
  77.  
  78. for key in results:
  79.     results[key] = results[key] / float(ITERATIONS)
  80.    
  81. print results
  82. print sum(results.values())
  83.  
  84.  
  85. # ##########################
  86. # WITH A TARGET LOCK & HAN SOLO CREW ...
  87.  
  88. print "\nWith a target lock and Han Solo crew..."
  89. results = {"c": 0,"h": 0,"f": 0,"m": 0}
  90.  
  91. for i in range(ITERATIONS):
  92.     result = rollDice(ATTACK_DICE)
  93.    
  94.     if result["m"] >= result["f"]:
  95.         # Use as TL
  96.         misses = result["m"]
  97.         focus = result["f"]
  98.         result["m"] = 0
  99.         result["f"] = 0
  100.         result = merge(result, rollDice(misses + focus))
  101.     else:
  102.         # Use as focus
  103.         result["h"] += result["f"]
  104.         result["f"] = 0
  105.    
  106.     results = merge(results, result)
  107.  
  108. for key in results:
  109.     results[key] = results[key] / float(ITERATIONS)
  110.    
  111. print results
  112. print sum(results.values())
  113.  
  114.  
  115. # ##########################
  116. # WITH A TARGET LOCK & A FOCUS ...
  117.  
  118. print "\nWith a target lock and a focus token..."
  119. results = {"c": 0,"h": 0,"f": 0,"m": 0}
  120.  
  121. for i in range(ITERATIONS):
  122.     result = rollDice(ATTACK_DICE)
  123.    
  124.     # Use TL
  125.     misses = result["m"]
  126.     result["m"] = 0
  127.     result = merge(result, rollDice(misses))
  128.    
  129.     # Usefocus
  130.     result["h"] += result["f"]
  131.     result["f"] = 0
  132.    
  133.     results = merge(results, result)
  134.  
  135. for key in results:
  136.     results[key] = results[key] / float(ITERATIONS)
  137.    
  138. print results
  139. print sum(results.values())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement