Här är en enklare AnyDice-lösning , ursprungligen baserat på Albert Masclans kod , men nästan helt omskrivet:
391.133 Du kan ändra 5d6
på sista raden till allt du vill ha. Stora dörrpooler kommer emellertid sannolikt att gå ut, eftersom koden fungerar genom att det blivit iterating över varje möjlig roll (det är vad som händer i AnyDice när du skickar en dörr till en funktion som förväntar sig en sekvens), och det blir snabbt alltför långsamt.
För lite större tärningspoolar, här är ett Python-program som gör samma beräkning:
391.133 Funktionen dice_pool(n, d)
som utgör det mesta av koden är i själva verket ett allmänt ändamålsenligt verktyg för beräkning av sannolikheter som involverar oordnade tärningspottar. Det är en generator som successivt returnerar varje rulle (i form ((1, n1), (2, n2), (3, n3), ...)
, där n1
, n2
, n3
etc. är antalet tärningar som rullade 1, 2, 3, etc.) och sannolikheten att erhålla den rollen. (Ja, det uppkomna värdet är en tuple som innehåller en tuple tuples. Det är helt naturligt att använda.)
För hastighet har jag valt att använda floats för sannolikhetsberäkningarna, trots att det finns små avrundningsfel. Det skulle vara möjligt att få exakta resultat genom att använda heltal / rationell matematik överallt, men vinsten skulle sannolikt vara minimal, eftersom det inte skulle finnas några reella möjligheter till katastrofal avbokning här. Det finns också några andra optimeringar, som förberäknar faktorialerna av siffror från 0 till N. Med optimeringarna tar beräkningen av sannolikheten för 20d6 ca 0,8 sekunder på min gamla bärbara dator, medan 50d6 tar ungefär 47 sekunder.