Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
108
Task/100-prisoners/JavaScript/100-prisoners-1.js
Normal file
108
Task/100-prisoners/JavaScript/100-prisoners-1.js
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
const _ = require('lodash');
|
||||
|
||||
const numPlays = 100000;
|
||||
|
||||
const setupSecrets = () => {
|
||||
// setup the drawers with random cards
|
||||
let secrets = [];
|
||||
|
||||
for (let i = 0; i < 100; i++) {
|
||||
secrets.push(i);
|
||||
}
|
||||
|
||||
return _.shuffle(secrets);
|
||||
}
|
||||
|
||||
const playOptimal = () => {
|
||||
|
||||
let secrets = setupSecrets();
|
||||
|
||||
|
||||
// Iterate once per prisoner
|
||||
loop1:
|
||||
for (let p = 0; p < 100; p++) {
|
||||
|
||||
// whether the prisoner succeedss
|
||||
let success = false;
|
||||
|
||||
// the drawer number the prisoner chose
|
||||
let choice = p;
|
||||
|
||||
|
||||
// The prisoner can choose up to 50 cards
|
||||
loop2:
|
||||
for (let i = 0; i < 50; i++) {
|
||||
|
||||
// if the card in the drawer that the prisoner chose is his card
|
||||
if (secrets[choice] === p){
|
||||
success = true;
|
||||
break loop2;
|
||||
}
|
||||
|
||||
// the next drawer the prisoner chooses will be the number of the card he has.
|
||||
choice = secrets[choice];
|
||||
|
||||
} // each prisoner gets 50 chances
|
||||
|
||||
|
||||
if (!success) return false;
|
||||
|
||||
} // iterate for each prisoner
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const playRandom = () => {
|
||||
|
||||
let secrets = setupSecrets();
|
||||
|
||||
// iterate for each prisoner
|
||||
for (let p = 0; p < 100; p++) {
|
||||
|
||||
let choices = setupSecrets();
|
||||
|
||||
let success = false;
|
||||
|
||||
for (let i = 0; i < 50; i++) {
|
||||
|
||||
if (choices[i] === p) {
|
||||
success = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!success) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const execOptimal = () => {
|
||||
|
||||
let success = 0;
|
||||
|
||||
for (let i = 0; i < numPlays; i++) {
|
||||
|
||||
if (playOptimal()) success++;
|
||||
|
||||
}
|
||||
|
||||
return 100.0 * success / 100000;
|
||||
}
|
||||
|
||||
const execRandom = () => {
|
||||
|
||||
let success = 0;
|
||||
|
||||
for (let i = 0; i < numPlays; i++) {
|
||||
|
||||
if (playRandom()) success++;
|
||||
|
||||
}
|
||||
|
||||
return 100.0 * success / 100000;
|
||||
}
|
||||
|
||||
console.log("# of executions: " + numPlays);
|
||||
console.log("Optimal Play Success Rate: " + execOptimal());
|
||||
console.log("Random Play Success Rate: " + execRandom());
|
||||
Loading…
Add table
Add a link
Reference in a new issue