RosettaCodeData/Task/Dice-game-probabilities/Action-/dice-game-probabilities.action
2023-07-01 13:44:08 -04:00

51 lines
1,021 B
Text

INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit
BYTE FUNC Roll(BYTE sides,dices)
BYTE i,sum
sum=0
FOR i=1 TO dices
DO
sum==+Rand(sides)+1
OD
RETURN (sum)
PROC Test(BYTE sides1,dices1,sides2,dices2)
INT i,count=[10000],sum1,sum2,wins1,wins2,draws
REAL r1,r2,p
wins1=0 wins2=0 draws=0
FOR i=1 TO count
DO
sum1=Roll(sides1,dices1)
sum2=Roll(sides2,dices2)
IF sum1>sum2 THEN
wins1==+1
ELSEIF sum1<sum2 THEN
wins2==+1
ELSE
draws==+1
FI
OD
IntToReal(wins1,r1)
IntToReal(wins2,r2)
RealDiv(r2,r1,p)
PrintF("Tested %I times%E",count)
PrintF("Player 1 with %B dice of %B sides%E",dices1,sides1)
PrintF("Player 2 with %B dice of %B sides%E",dices2,sides2)
PrintF("Player 1 wins %I times%E",wins1)
PrintF("Player 2 wins %I times%E",wins2)
PrintF("Draw %I times%E",draws)
Print("Player 1 beating Player 2 probability:")
PrintRE(p)
PutE()
RETURN
PROC Main()
Put(125) PutE() ;clear the screen
Test(4,9,6,6)
Test(10,5,7,6)
RETURN