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;
}