Monty Hall problem

by Anton_Diaz

HTML

<H1>Статистическая проверка парадокса Монти Холла</H1>

<p>Данная страница проверяет <a href="https://ru.wikipedia.org/wiki/Парадокс_Монти_Холла">парадокс Монти Холла</a> статистическим способом. Предполагается, что игрок всегда соглашался на предложение сменить выбор двери. При этом в статистике отражено и количество раз, когда игрок изначально угадал дверь с автомобилем. Прочая статистика приводится для проверки данных. Используйте кнопки с логом, что увидеть полные результаты (работает медленно!)</p>

<form>
	<input name="start1" type="button" value="10000 игр">
	<input name="start2" type="button" value="10 игр с логом">
	<input name="start3" type="button" value="100 игр с логом">
	<input name="start4" type="button" value="1000 игр с логом">
</form>

<table id="stats">
	<tr>
		<td id="game-count">
		<td>повторов игры
	<tr>
		<td id="door-1-car-count">
		<td>машина была за дверью №&nbsp;1
	<tr>
		<td id="door-2-car-count">
		<td>машина была за дверью №&nbsp;2
	<tr>
		<td id="door-3-car-count">
		<td>машина была за дверью №&nbsp;3
	<tr>
		<td id="door-1-player-choice-count">
		<td>игрок изначально выбрал дверь №&nbsp;1
	<tr>
		<td id="door-2-player-choice-count">
		<td>игрок изначально выбрал дверь №&nbsp;2
	<tr>
		<td id="door-3-player-choice-count">
		<td>игрок изначально выбрал дверь №&nbsp;3
	<tr class="highlight">
		<td id="player-right-choice-count">
		<td>игрок изначально угадал дверь с автомобилем
	<tr>
		<td id="door-1-caster-choice-count">
		<td>ведущий открыл дверь №&nbsp;1
	<tr>
		<td id="door-2-caster-choice-count">
		<td>ведущий открыл дверь №&nbsp;2
	<tr>
		<td id="door-3-caster-choice-count">
		<td>ведущий открыл дверь №&nbsp;3
	<tr>
		<td id="door-1-player-rechoice-count">
		<td>игрок изменил выбор на дверь №&nbsp;1
	<tr>
		<td id="door-2-player-rechoice-count">
		<td>игрок изменил выбор на дверь №&nbsp;2
	<tr>
		<td id="door-3-player-rechoice-count">
		<td>игрок изменил выбор на дверь №&nbsp;3
	<tr class="highlight">
		<td...

CSS

BODY, H1, TABLE, TR, TD, FORM, DIV, SPAN {
	margin: 0;
	padding: 0;
	}

BODY {
	font-family: Verdana, sans-serif;
	font-size: 12px;
	margin: 1em;
	}

H1 {
	font-size: 2em;
	font-weight: bold;
	margin: 0.5em 0;
	}

P, FORM {
	margin: 1em 0;
	}

#stats {
	border: none;
	border-collapse: collapse;
	font-family: inherit;
	font-size: inherit;
	display: none;
	margin: 1em 0;
	}

#stats.revealed {display: table;}

.highlight {
	background: #ffffc0;
	border: 1px solid #c0c0c0;
	}

TD {
	padding: 0 5px;
	}

TD:first-child {
	padding-right: 0;
	text-align: right;
	}

#sample {
	display: none;
	font-family: Consolas, monospace;
	margin: 1em 0;
	}

#sample.revealed {display: block;}

#log {
	font-family: Consolas, monospace;
	font-size: 30px;
	margin: -0.33em;
	}

.game {
	border: 1px solid #c0c0c0;
	float: left;
	margin: 0.33em;
	}

.cell {
	margin: 4px 0;
	}

.cell SPAN {
	border: 1px solid #c0c0c0;
	}

.player-choice {
	background: #c0ffc0;
	}

.caster-choice {
	background: #ffc0c0;
	}

.player-rechoice {
	background: #40e040;
	}

JavaScript

document.getElementsByName('start1')[0].addEventListener('click',function(){Start(false,10000)},false);
document.getElementsByName('start2')[0].addEventListener('click',function(){Start(true,10)},false);
document.getElementsByName('start3')[0].addEventListener('click',function(){Start(true,100)},false);
document.getElementsByName('start4')[0].addEventListener('click',function(){Start(true,1000)},false);

function Start(makeLog,games) {
	var door = [];                    // двери
	var remainDoor = [];              // двери, которые может открыть ведущий (номера дверей - значения элементов массива, а не их номера)
	var doorWithCar = 0;              // номер двери с машиной
	var playerChoice = 0;             // номер двери, вабранной игроком
	var casterChoice = 0;             // номер двери, открытой ведущим
	var playerReChoice = 0;           // номер двери, ПЕРЕвабранной игроком
	var doorCarCount = [];            // сколько раз была машина в каждой из трех дверей    (номер элемента в массиве - номер двери)
	var playerChoiceCount = [];       // сколько раз игрок выбрал каждую из трех дверей     (номер элемента в массиве - номер двери)
	var casterChoiceCount = [];       // сколько раз ведущий открывал каждую из трех дверей (номер элемента в массиве - номер двери)
	var playerReChoiceCount = [];     // сколько раз игрок ПЕРЕвыбрал каждую из трех дверей (номер элемента в массиве - номер двери)
	for (i = 0; i < 3; i++) {         // заранее заполняем массивы нулями, так как undefined не инкрементируется
			doorCarCount[i] = 0;
			playerChoiceCount[i] = 0;
			casterChoiceCount[i] = 0;
			playerReChoiceCount[i] = 0;
		}
	var playerChoiceRightCount = 0;    // сколько раз игрок изначально угадал дверь с машиной
	var playerReChoiceRightCount = 0;  // сколько раз игрок угадал бы дверь с машиной смены выбора
	var getById    = function(e) {return document.getElementById(e);}
	var getByClass = function(e) {return document.getElementsByClassName(e);}
	var gameElem;                 ...