40 lines
1.2 KiB
Text
40 lines
1.2 KiB
Text
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
|