Skip to content

Instantly share code, notes, and snippets.

@TooBug
Created March 5, 2018 06:44
Show Gist options
  • Save TooBug/2af01dbe55c90f442891a7d717e0f0ff to your computer and use it in GitHub Desktop.
Save TooBug/2af01dbe55c90f442891a7d717e0f0ff to your computer and use it in GitHub Desktop.
三门问题
'use strict';
/**
* 模拟一次游戏过程
* @param {Boolean} isKnown 主持人(卖水的)是否是故意选择(否则是随机选择)
* @return {Boolean} 选择不交换的结果是否猜中(即交换后没猜中的情况)
*/
function isWin(isKnown){
// 目标在几号
var target = (Math.random()*3) | 0;
// 猜的是几号
var guess = (Math.random()*3) | 0;
if(isKnown){
// 如果是故意选择,则剩下的两个一定是一个中一个没中
// 只要返回一开始选择的有没有中
return target === guess;
}else{
// 主持人随机选择的是几号
var random = (Math.random()*3) | 0;
// 按照条件,不能选择猜的那一个
while(random === guess){
random = (Math.random()*3) | 0;
}
if(random === target){
// 如果主持人随机选中了目标,和题设不符,丢弃(报错)
throw new Error('wrong');
}else{
// 如果主持人随机没有选中目标,返回一开始选择的有没有中
return target === guess;
}
}
}
function run(isKnown,count){
var result = {
win:0,
lose:0
};
for(let i=count;i--;){
try{
let winResult = isWin(isKnown);
if(winResult){
result.win++;
}else{
result.lose++
}
}catch(e){
}
}
return result;
}
console.log('主持人故意选择',run(true,10000));
console.log('主持人随机选择',run(false,10000));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment