Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- ITERATIONS = 1000000
- ATTACK_DICE = 3
- def merge(d1, d2, merge_fn=lambda x,y:x+y):
- """
- Merges two dictionaries, non-destructively, combining
- values on duplicate keys as defined by the optional merge
- function.
- """
- result = dict(d1)
- for k,v in d2.iteritems():
- if k in result:
- result[k] = merge_fn(result[k], v)
- else:
- result[k] = v
- return result
- def rollDice(n):
- die_roll = {"c": 0,"h": 0,"f": 0,"m": 0}
- for i in range(n):
- die_roll[random.choice(["m", "m", "h", "h", "h", "c", "f", "f"])] += 1
- return die_roll
- # ##########################
- # WITH NO HELP ...
- print "\nWith nothing to help you..."
- results = {"c": 0,"h": 0,"f": 0,"m": 0}
- for i in range(ITERATIONS):
- results = merge(results, rollDice(ATTACK_DICE))
- for key in results:
- results[key] = results[key] / float(ITERATIONS)
- print results
- print sum(results.values())
- # ##########################
- # WITH A FOCUS ...
- print "\nWith a focus token..."
- results = {"c": 0,"h": 0,"f": 0,"m": 0}
- for i in range(ITERATIONS):
- result = rollDice(ATTACK_DICE)
- result["h"] += result["f"]
- result["f"] = 0
- results = merge(results, result)
- for key in results:
- results[key] = results[key] / float(ITERATIONS)
- print results
- print sum(results.values())
- # ##########################
- # WITH A TARGET LOCK ...
- print "\nWith a target lock..."
- results = {"c": 0,"h": 0,"f": 0,"m": 0}
- for i in range(ITERATIONS):
- result = rollDice(ATTACK_DICE)
- misses = result["m"]
- focus = result["f"]
- result["m"] = 0
- result["f"] = 0
- result = merge(result, rollDice(misses + focus))
- results = merge(results, result)
- for key in results:
- results[key] = results[key] / float(ITERATIONS)
- print results
- print sum(results.values())
- # ##########################
- # WITH A TARGET LOCK & HAN SOLO CREW ...
- print "\nWith a target lock and Han Solo crew..."
- results = {"c": 0,"h": 0,"f": 0,"m": 0}
- for i in range(ITERATIONS):
- result = rollDice(ATTACK_DICE)
- if result["m"] >= result["f"]:
- # Use as TL
- misses = result["m"]
- focus = result["f"]
- result["m"] = 0
- result["f"] = 0
- result = merge(result, rollDice(misses + focus))
- else:
- # Use as focus
- result["h"] += result["f"]
- result["f"] = 0
- results = merge(results, result)
- for key in results:
- results[key] = results[key] / float(ITERATIONS)
- print results
- print sum(results.values())
- # ##########################
- # WITH A TARGET LOCK & A FOCUS ...
- print "\nWith a target lock and a focus token..."
- results = {"c": 0,"h": 0,"f": 0,"m": 0}
- for i in range(ITERATIONS):
- result = rollDice(ATTACK_DICE)
- # Use TL
- misses = result["m"]
- result["m"] = 0
- result = merge(result, rollDice(misses))
- # Usefocus
- result["h"] += result["f"]
- result["f"] = 0
- results = merge(results, result)
- for key in results:
- results[key] = results[key] / float(ITERATIONS)
- print results
- print sum(results.values())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement