Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Probably Dice solution in Clear category for Probably Dice by PaulusWeb
def probability(dice_number, sides, target):
if target > dice_number*sides:
return 0
if target < dice_number:
return 0
probability_dy = {i:1/sides for i in range(1,sides+1)}
for i in range(2, dice_number+1):
new_probability_dy = {j:0 for j in range(i, sides*i+1)}
for x1 in probability_dy.keys():
for x2 in range(1, sides+1):
sum_sides = x1 + x2
new_probability_dy[sum_sides] += probability_dy[x1]*1/sides
probability_dy = new_probability_dy
return round(probability_dy[target],4)
if __name__ == '__main__':
#These are only used for self-checking and are not necessary for auto-testing
def almost_equal(checked, correct, significant_digits=4):
precision = 0.1 ** significant_digits
return correct - precision < checked < correct + precision
assert(almost_equal(probability(2, 6, 3), 0.0556)), "Basic example"
assert(almost_equal(probability(2, 6, 4), 0.0833)), "More points"
assert(almost_equal(probability(2, 6, 7), 0.1667)), "Maximum for two 6-sided dice"
assert(almost_equal(probability(2, 3, 5), 0.2222)), "Small dice"
assert(almost_equal(probability(2, 3, 7), 0.0000)), "Never!"
assert(almost_equal(probability(3, 6, 7), 0.0694)), "Three dice"
assert(almost_equal(probability(10, 10, 50), 0.0375)), "Many dice, many sides"
July 24, 2019