JSFiddle - React, Tailwind, and code Playground
by Pavel Kityan
JavaScript
var success = 0; // количество экспериментов (1 млн вытяниваний), в который одно и более совпадений
var times = 100; // сколько провести экспериментов
// цикл эксперимента
for (var i=0; i<times; i++){
success += doJob(true);
}
// выводим результат
console.log(success/times);
// --------------------
// функция проведения одного эксперимента (передаём в неё - возвращать шляпу в пул или нет)
function doJob(putHatBack){
var peopleQty = 1000000;
var selectedHats = [];
var matched = 0;
for (var i = 0; i < peopleQty; i++) {
newHatNumberFound = false;
while (!newHatNumberFound){
var hatNumber = Math.round(Math.random()*peopleQty);
if (putHatBack || !selectedHats[hatNumber]){
newHatNumberFound = true;
}
}
if (!putHatBack){
selectedHats[hatNumber] = true;
}
if (i == hatNumber){
matched++;
}
}
//console.log(matched);
return (matched >= 1) ? 1 : 0;
}