RosettaCodeData/Task/Dice-game-probabilities/Lua/dice-game-probabilities-2.lua

34 lines
876 B
Lua

local function comp(ndice1, nsides1, ndice2, nsides2)
local function throws(ndice, nsides)
local sums = {}
for i = 1, ndice*nsides do
sums[i] = 0
end
local function throw(ndice, nsides, s)
if (ndice==0) then
sums[s] = sums[s] + 1
else
for i = 1, nsides do
throw(ndice-1, nsides, s+i)
end
end
return sums
end
return throw(ndice, nsides, 0)
end
local p1 = throws(ndice1, nsides1)
local p2 = throws(ndice2, nsides2)
local wins, coms = 0, nsides1^ndice1 * nsides2^ndice2
for k1,v1 in pairs(p1) do
for k2,v2 in pairs(p2) do
if (k1 > k2) then
wins = wins + v1 * v2
end
end
end
print("computed: p1 = "..ndice1.."d"..nsides1..", p2 = "..ndice2.."d"..nsides2..", prob = "..wins.." / "..coms.." = "..(wins/coms))
end
comp(9, 4, 6, 6)
comp(5, 10, 6, 7)