50 lines
1.3 KiB
Plaintext
50 lines
1.3 KiB
Plaintext
playRandom = function(n)
|
|
// using 0-99 instead of 1-100
|
|
pardoned = 0
|
|
numInDrawer = range(99)
|
|
choiceOrder = range(99)
|
|
for round in range(1, n)
|
|
numInDrawer.shuffle
|
|
choiceOrder.shuffle
|
|
for prisoner in range(99)
|
|
found = false
|
|
for card in choiceOrder[:50]
|
|
if card == prisoner then
|
|
found = true
|
|
break
|
|
end if
|
|
end for
|
|
if not found then break
|
|
end for
|
|
if found then pardoned = pardoned + 1
|
|
end for
|
|
return pardoned / n * 100
|
|
end function
|
|
|
|
playOptimal = function(n)
|
|
// using 0-99 instead of 1-100
|
|
pardoned = 0
|
|
numInDrawer = range(99)
|
|
for round in range(1, n)
|
|
numInDrawer.shuffle
|
|
for prisoner in range(99)
|
|
found = false
|
|
drawer = prisoner
|
|
for i in range(1,50)
|
|
card = numInDrawer[drawer]
|
|
if card == prisoner then
|
|
found = true
|
|
break
|
|
end if
|
|
drawer = card
|
|
end for
|
|
if not found then break
|
|
end for
|
|
if found then pardoned = pardoned + 1
|
|
end for
|
|
return pardoned / n * 100
|
|
end function
|
|
|
|
print "Random: " + playRandom(10000) + "%"
|
|
print "Optimal: " + playOptimal(10000) + "%"
|