Här är en enkel "brute force" AnyDice-lösning till ditt problem:
391.133 Funktionen [brawl A vs B]
gör exakt samma sak som i din ursprungliga kod (även om jag tweaked det något), medan hjälpen [set element I in SEQ to N]
är från detta svar . Den nya [brawl A vs B with optional swap]
-funktionen kallar bara den första funktionen två gånger, en gång med den nedre A-tröskeln byttes med den högsta die av B och en gång utan, och återkommer det bättre resultatet av de två.
Det fina med detta tillvägagångssätt är att vi faktiskt inte behöver bestämma exakt när det är fördelaktigt för A att byta tärningarna. Allt vi behöver anta är att med den faktiska rullade tärningen på bordet är spelare A smart att göra matematiken och ta reda på om byte gör deras poäng bättre eller sämre.
Det visar sig emellertid att i det här fallet är den optimala strategin ganska enkel: A ska byta sin lägsta dysrulle med B: s högsta om och endast om den är mindre än B: s högsta. (Om de är lika, så byter de dem ingen roll.) Så följande optimerade funktion kommer faktiskt att ge samma resultat i det här fallet:
391.133Ps. Som ett alternativ, här är ett Python-program som beräknar samma sak , med hjälp av (en något modifierad version av) tärningspoolgeneratorn från detta svar :
391.133I motsats till A.B.s stokastiska simulering beräknar den här koden faktiskt de exakta sannolikheterna (väl, exakt upp till noggrannhet i flytpunkten) av de olika resultaten direkt genom att räkna upp alla möjliga tärningsrullar och deras sannolikheter, precis som AnyDice gör. Det är ganska lite snabbare än AnyDice dock med 3D6 kontra 3D6 fall tar bara cirka 0,1 sekunder och 4D6 vs. 4D6 tar endast 0,25 sekunder på TIO-servern