Wyświetl Pojedyńczy Post
Stary 21-10-2019, 12:24   #5
Dust Mephit
Hungmung
 
Dust Mephit's Avatar
 
Reputacja: 1 Dust Mephit ma wspaniałą reputacjęDust Mephit ma wspaniałą reputacjęDust Mephit ma wspaniałą reputacjęDust Mephit ma wspaniałą reputacjęDust Mephit ma wspaniałą reputacjęDust Mephit ma wspaniałą reputacjęDust Mephit ma wspaniałą reputacjęDust Mephit ma wspaniałą reputacjęDust Mephit ma wspaniałą reputacjęDust Mephit ma wspaniałą reputacjęDust Mephit ma wspaniałą reputację
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...
 
Dust Mephit jest offline