#!/usr/local/pypy-2.2/bin/pypy #!/usr/local/cpython-3.3/bin/python import sys import random def die(): return random.randint(1, 6) def compute_attacker_roll(): list_ = [die(), die(), die()] list_.sort(reverse=True) return list_ def compute_defender_roll(): list_ = [die(), die()] list_.sort(reverse=True) return list_ def one_comparison(): attacker_roll = compute_attacker_roll() defender_roll = compute_defender_roll() for_attacker = 0 for_defender = 0 if attacker_roll[0] > defender_roll[0]: for_attacker += 1 else: for_defender += 1 if attacker_roll[1] > defender_roll[1]: for_attacker += 1 else: for_defender += 1 return (for_attacker, for_defender) def my_range(top): value = 0 while value < top: yield value value += 1 def main(): total_for_attacker = 0.0 total_for_defender = 0.0 top = 10 ** 10 #top = 10 ** 6 for rep in my_range(top): one_attacker_roll, one_defender_roll = one_comparison() total_for_attacker += one_attacker_roll total_for_defender += one_defender_roll if not rep % 1000000: sys.stdout.write('repetition {}, {:.1f}% complete, {:.7f}% for attacker\r'.format( rep, float(rep) / top * 100.0, total_for_attacker * 100.0 / (total_for_attacker + total_for_defender))) sys.stdout.flush() sys.stdout.write('\n{}, {}: {:.7f}%\n'.format( total_for_attacker, total_for_defender, total_for_attacker * 100.0 / (total_for_attacker + total_for_defender), )) main()