Data update
This commit is contained in:
parent
29a5eea0d4
commit
5c1bb7bfa9
2011 changed files with 35081 additions and 3229 deletions
49
Task/100-prisoners/Ecstasy/100-prisoners.ecstasy
Normal file
49
Task/100-prisoners/Ecstasy/100-prisoners.ecstasy
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
module OneHundredPrisoners {
|
||||
@Inject Console console;
|
||||
|
||||
void run() {
|
||||
console.print($"# of executions: {attempts}");
|
||||
console.print($"Optimal play success rate: {simulate(tryOpt)}%");
|
||||
console.print($" Random play success rate: {simulate(tryRnd)}%");
|
||||
}
|
||||
|
||||
Int attempts = 10000;
|
||||
|
||||
Dec simulate(function Boolean(Int[]) allFoundNumber) {
|
||||
Int[] drawers = new Int[100](i->i);
|
||||
Int pardoned = 0;
|
||||
for (Int i : 1..attempts) {
|
||||
if (allFoundNumber(drawers.shuffled())) {
|
||||
++pardoned;
|
||||
}
|
||||
}
|
||||
return (pardoned * 1000000 / attempts).toDec() / 10000;
|
||||
}
|
||||
|
||||
Boolean tryRnd(Int[] drawers) {
|
||||
Inmates: for (Int inmate : 0..<100) {
|
||||
Int[] choices = drawers.shuffled();
|
||||
for (Int attempt : 0..<50) {
|
||||
if (drawers[choices[attempt]] == inmate) {
|
||||
continue Inmates;
|
||||
}
|
||||
}
|
||||
return False;
|
||||
}
|
||||
return True;
|
||||
}
|
||||
|
||||
Boolean tryOpt(Int[] drawers) {
|
||||
Inmates: for (Int inmate : 0..<100) {
|
||||
Int choice = inmate;
|
||||
for (Int attempt : 0..<50) {
|
||||
if (drawers[choice] == inmate) {
|
||||
continue Inmates;
|
||||
}
|
||||
choice = drawers[choice];
|
||||
}
|
||||
return False;
|
||||
}
|
||||
return True;
|
||||
}
|
||||
}
|
||||
40
Task/100-prisoners/True-BASIC/100-prisoners.basic
Normal file
40
Task/100-prisoners/True-BASIC/100-prisoners.basic
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue