Data update
This commit is contained in:
parent
796d366b97
commit
35bcdeebf8
504 changed files with 7045 additions and 610 deletions
21
Task/Monty-Hall-problem/Chapel/monty-hall-problem-2.chapel
Normal file
21
Task/Monty-Hall-problem/Chapel/monty-hall-problem-2.chapel
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
use Random;
|
||||
|
||||
config const numGames = 100_000_000;
|
||||
|
||||
var switch, stick: uint;
|
||||
|
||||
// have a separate RNG for each task; add together the results at the end
|
||||
forall i in 1..numGames
|
||||
with (var rand = new RandomStream(uint, parSafe = false), + reduce stick)
|
||||
{
|
||||
var chosen_door = rand.getNext() % 3;
|
||||
var winner_door = rand.getNext() % 3;
|
||||
if chosen_door == winner_door then
|
||||
stick += 1;
|
||||
}
|
||||
|
||||
// if you lost by sticking it means you would have won by switching
|
||||
switch = numGames - stick;
|
||||
writeln("Over ", numGames, " games:\n - switching wins ",
|
||||
100.0*switch / numGames, "% of the time and\n - sticking wins ",
|
||||
100.0*stick / numGames, "% of the time");
|
||||
21
Task/Monty-Hall-problem/EasyLang/monty-hall-problem.easy
Normal file
21
Task/Monty-Hall-problem/EasyLang/monty-hall-problem.easy
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
max = 1000000
|
||||
for i = 1 to max
|
||||
car_door = random 3
|
||||
chosen_door = random 3
|
||||
if car_door <> chosen_door
|
||||
montys_door = 6 - car_door - chosen_door
|
||||
else
|
||||
repeat
|
||||
montys_door = random 3
|
||||
until montys_door <> car_door
|
||||
.
|
||||
.
|
||||
if car_door = chosen_door
|
||||
stay += 1
|
||||
.
|
||||
if car_door = 6 - montys_door - chosen_door
|
||||
switch += 1
|
||||
.
|
||||
.
|
||||
print "If you stick to your choice, you have a " & stay / max * 100 & " percent chance to win"
|
||||
print "If you switched, you have a " & switch / max * 100 & " percent chance to win"
|
||||
|
|
@ -1,56 +1,2 @@
|
|||
function montyHall(numDoors,numSimulations)
|
||||
|
||||
assert(numDoors > 2);
|
||||
|
||||
function num = randInt(n)
|
||||
num = floor( n*rand()+1 );
|
||||
end
|
||||
|
||||
%The first column will tallie wins, the second losses
|
||||
switchedDoors = [0 0];
|
||||
stayed = [0 0];
|
||||
|
||||
|
||||
for i = (1:numSimulations)
|
||||
|
||||
availableDoors = (1:numDoors); %Preallocate the available doors
|
||||
winningDoor = randInt(numDoors); %Define the winning door
|
||||
playersOriginalChoice = randInt(numDoors); %The player picks his initial choice
|
||||
|
||||
availableDoors(playersOriginalChoice) = []; %Remove the players choice from the available doors
|
||||
|
||||
%Pick the door to open from the available doors
|
||||
openDoor = availableDoors(randperm(numel(availableDoors))); %Sort the available doors randomly
|
||||
openDoor(openDoor == winningDoor) = []; %Make sure Monty doesn't open the winning door
|
||||
openDoor = openDoor(randInt(numel(openDoor))); %Choose a random door to open
|
||||
|
||||
availableDoors(availableDoors==openDoor) = []; %Remove the open door from the available doors
|
||||
availableDoors(end+1) = playersOriginalChoice; %Put the player's original choice back into the pool of available doors
|
||||
availableDoors = sort(availableDoors);
|
||||
|
||||
playersNewChoice = availableDoors(randInt(numel(availableDoors))); %Pick one of the available doors
|
||||
|
||||
if playersNewChoice == playersOriginalChoice
|
||||
switch playersNewChoice == winningDoor
|
||||
case true
|
||||
stayed(1) = stayed(1) + 1;
|
||||
case false
|
||||
stayed(2) = stayed(2) + 1;
|
||||
otherwise
|
||||
error 'ERROR'
|
||||
end
|
||||
else
|
||||
switch playersNewChoice == winningDoor
|
||||
case true
|
||||
switchedDoors(1) = switchedDoors(1) + 1;
|
||||
case false
|
||||
switchedDoors(2) = switchedDoors(2) + 1;
|
||||
otherwise
|
||||
error 'ERROR'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
disp(sprintf('Switch win percentage: %f%%\nStay win percentage: %f%%\n', [switchedDoors(1)/sum(switchedDoors),stayed(1)/sum(stayed)] * 100));
|
||||
|
||||
end
|
||||
wins = ceil(3*rand(1e8,1)) - ceil(3*rand(1e8,1))
|
||||
mprintf('chance to win for staying: %1.6f %%\nchance to win for changing: %1.6f %%', 100*length(wins(wins==0))/length(wins), 100*length(wins(wins<>0))/length(wins))
|
||||
|
|
|
|||
|
|
@ -1,3 +1,2 @@
|
|||
>> montyHall(3,100000)
|
||||
Switch win percentage: 66.705972%
|
||||
Stay win percentage: 33.420062%
|
||||
chance to win for staying: 33.334694 %
|
||||
chance to win for changing: 66.665306 %
|
||||
|
|
|
|||
56
Task/Monty-Hall-problem/MATLAB/monty-hall-problem-3.m
Normal file
56
Task/Monty-Hall-problem/MATLAB/monty-hall-problem-3.m
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
function montyHall(numDoors,numSimulations)
|
||||
|
||||
assert(numDoors > 2);
|
||||
|
||||
function num = randInt(n)
|
||||
num = floor( n*rand()+1 );
|
||||
end
|
||||
|
||||
%The first column will tallie wins, the second losses
|
||||
switchedDoors = [0 0];
|
||||
stayed = [0 0];
|
||||
|
||||
|
||||
for i = (1:numSimulations)
|
||||
|
||||
availableDoors = (1:numDoors); %Preallocate the available doors
|
||||
winningDoor = randInt(numDoors); %Define the winning door
|
||||
playersOriginalChoice = randInt(numDoors); %The player picks his initial choice
|
||||
|
||||
availableDoors(playersOriginalChoice) = []; %Remove the players choice from the available doors
|
||||
|
||||
%Pick the door to open from the available doors
|
||||
openDoor = availableDoors(randperm(numel(availableDoors))); %Sort the available doors randomly
|
||||
openDoor(openDoor == winningDoor) = []; %Make sure Monty doesn't open the winning door
|
||||
openDoor = openDoor(randInt(numel(openDoor))); %Choose a random door to open
|
||||
|
||||
availableDoors(availableDoors==openDoor) = []; %Remove the open door from the available doors
|
||||
availableDoors(end+1) = playersOriginalChoice; %Put the player's original choice back into the pool of available doors
|
||||
availableDoors = sort(availableDoors);
|
||||
|
||||
playersNewChoice = availableDoors(randInt(numel(availableDoors))); %Pick one of the available doors
|
||||
|
||||
if playersNewChoice == playersOriginalChoice
|
||||
switch playersNewChoice == winningDoor
|
||||
case true
|
||||
stayed(1) = stayed(1) + 1;
|
||||
case false
|
||||
stayed(2) = stayed(2) + 1;
|
||||
otherwise
|
||||
error 'ERROR'
|
||||
end
|
||||
else
|
||||
switch playersNewChoice == winningDoor
|
||||
case true
|
||||
switchedDoors(1) = switchedDoors(1) + 1;
|
||||
case false
|
||||
switchedDoors(2) = switchedDoors(2) + 1;
|
||||
otherwise
|
||||
error 'ERROR'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
disp(sprintf('Switch win percentage: %f%%\nStay win percentage: %f%%\n', [switchedDoors(1)/sum(switchedDoors),stayed(1)/sum(stayed)] * 100));
|
||||
|
||||
end
|
||||
3
Task/Monty-Hall-problem/MATLAB/monty-hall-problem-4.m
Normal file
3
Task/Monty-Hall-problem/MATLAB/monty-hall-problem-4.m
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
>> montyHall(3,100000)
|
||||
Switch win percentage: 66.705972%
|
||||
Stay win percentage: 33.420062%
|
||||
23
Task/Monty-Hall-problem/Standard-ML/monty-hall-problem.ml
Normal file
23
Task/Monty-Hall-problem/Standard-ML/monty-hall-problem.ml
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
val pidint = Word64.toInt(Posix.Process.pidToWord(Posix.ProcEnv.getpid()));
|
||||
val rand = Random.rand(LargeInt.toInt(Time.toSeconds(Time.now())), pidint);
|
||||
|
||||
fun stick_win 0 wins = wins
|
||||
| stick_win trial wins =
|
||||
let
|
||||
val winner_door = (Random.randNat rand) mod 3;
|
||||
val chosen_door = (Random.randNat rand) mod 3;
|
||||
in
|
||||
if winner_door = chosen_door then
|
||||
stick_win (trial-1) (wins+1)
|
||||
else
|
||||
stick_win (trial-1) wins
|
||||
end
|
||||
|
||||
val trials = 1000000;
|
||||
val sticks = stick_win trials 0;
|
||||
val stick_winrate = 100.0 * Real.fromInt(sticks) / Real.fromInt(trials);
|
||||
(* if you lost by sticking you would have won by swapping *)
|
||||
val swap_winrate = 100.0 - stick_winrate;
|
||||
|
||||
(print ("sticking = " ^ Real.toString(stick_winrate) ^ "% win rate\n");
|
||||
print ("swapping = " ^ Real.toString(swap_winrate) ^ "% win rate\n"));
|
||||
Loading…
Add table
Add a link
Reference in a new issue