100 prisoners: Difference between revisions
Content added Content deleted
(Add Dart implementation) |
(Added True BASIC) |
||
Line 1,119: | Line 1,119: | ||
Observed ratio: 0.3052, expected ratio with N=2*O: greater than about 0.30685 |
Observed ratio: 0.3052, expected ratio with N=2*O: greater than about 0.30685 |
||
</pre> |
</pre> |
||
==={{header|True BASIC}}=== |
|||
{{trans|Yabasic}} |
|||
<syntaxhighlight lang="qbasic">FUNCTION trials(prisoners, iterations, optimal) |
|||
DIM drawers(100) |
|||
FOR i = 1 TO prisoners |
|||
LET drawers(i) = i |
|||
NEXT i |
|||
FOR i = 1 TO iterations |
|||
FOR k = 1 TO prisoners |
|||
LET x = RND+1 |
|||
LET p = drawers(x) |
|||
LET drawers(x) = drawers(k) |
|||
LET drawers(k) = p |
|||
NEXT k |
|||
FOR prisoner = 1 TO prisoners |
|||
LET found = false |
|||
IF optimal<>0 THEN LET drawer = prisoner ELSE LET drawer = RND+1 |
|||
FOR j = 1 TO prisoners/2 |
|||
LET drawer = drawers(drawer) |
|||
IF drawer = prisoner THEN |
|||
LET found = true |
|||
EXIT FOR |
|||
END IF |
|||
IF (NOT optimal<>0) THEN LET drawer = RND+1 |
|||
NEXT j |
|||
IF (NOT found<>0) THEN EXIT FOR |
|||
NEXT prisoner |
|||
LET pardoned = pardoned+found |
|||
NEXT i |
|||
LET trials = (100*pardoned/iterations) |
|||
END FUNCTION |
|||
LET false = 0 |
|||
LET true = 1 |
|||
LET iterations = 10000 |
|||
PRINT "Simulation count: "; iterations |
|||
FOR prisoners = 10 TO 100 STEP 90 |
|||
LET randon = trials(prisoners,iterations,false) |
|||
LET optimal = trials(prisoners,iterations,true) |
|||
PRINT "Prisoners: "; prisoners; ", random: "; randon; ", optimal: "; optimal |
|||
NEXT prisoners |
|||
END</syntaxhighlight> |
|||
=={{header|BCPL}}== |
=={{header|BCPL}}== |