Taki był mój pierwszy trop. Niemniej, wskazówka Toma o rozkładzie normalnym wydaje mi się dużo bliżej rozwiązania.
Przypadkiem znalazłem funkcję (szkoda, że nie moja), która w bardzo ciekawy sposób rozwiązuje problem. Zakłada 100% szansy w 1-elementowym zbiorze b = [1], po czym z każdym kolejnym rzutem rozszerza zbiór o liczbę ścianek i rozkłada tę szansę zgodnie z odchyleniem standardowym.
Kod:
def probability(dice_number, sides, target):
a = [1/sides]*sides
b = [1]
for k in range(dice_number):
b = [0]*sides + b + [0]*sides
c = []
for i in range(len(b)-sides):
c.append(sum([a[j]*b[i+j] for j in range(sides)]))
b = c
if target >= len(b):
return 0
else:
return b[target]
Na
Repl.it znalezienie szansy na dany wynik w 100 rzutach D100 zajmuje jej trochę ponad 35 sekund. Motzne...