Skip to content

Instantly share code, notes, and snippets.

@caiorn
Created October 21, 2020 23:37
Show Gist options
  • Select an option

  • Save caiorn/378fe36972b8f7405d1b391414f3c1b2 to your computer and use it in GitHub Desktop.

Select an option

Save caiorn/378fe36972b8f7405d1b391414f3c1b2 to your computer and use it in GitHub Desktop.
Problema de Monty Hall
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Problema de Monty Hall</h1>
<input type="radio" name="porta" id="porta1" value="0">
<label for="porta1">Porta 1</label>
<input type="radio" name="porta" id="porta2" value="1" checked="">
<label for="porta2">Porta 2</label>
<input type="radio" name="porta" id="porta3" value="2">
<label for="porta3">Porta 3</label><br><br>
<input type="button" value="JOGAR" onclick="Jogar()">
<input type="button" value="RESET" onclick="Reset()">
<input type="number" id="quantidade" min="1" max="10000" step="10" value="100">
<span>Vezes</span><br><br>
<table border="1">
<tbody>
<tr>
<td></td>
<td>QUANDO NUNCA TROCA</td>
<td>QUANDO SEMPRE TROCA</td>
</tr>
<tr>
<td>QUATIDADE CARROS GANHOS</td>
<td id="carroGanhosNuncaTroca"> </td>
<td id="carroGanhosSempreTroca"> </td>
</tr>
<tr>
<td>QUANTIDADE BODES GANHOS</td>
<td id="bodeGanhosNuncaTroca"></td>
<td id="bodeGanhosSempreTroca"></td>
</tr>
</tbody>
</table>
<script>
var portas = ['bode', 'bode', 'carro'];
var ganhou_carro_sem_trocar = 0;
var ganhou_carro_trocando = 0;
var ganhou_bode_sem_trocar = 0;
var ganhou_bode_trocando = 0;
function Jogar() {
var quantidade_jogos = document.getElementById('quantidade').value;
for (let index = 0; index < quantidade_jogos; index++) {
Iniciar();
}
}
function Iniciar() {
console.log('Portas Antes embaralhamento: ' + portas);
portas = embaralhar(portas);
console.log('Portas apos embaralhamento: ' + portas);
//O Apresentador sabe o numero da porta premiada
var n_porta_premiada = portas.indexOf('carro');
console.log('Porta Premiada: ' + n_porta_premiada);
//O Jogador faz a escolha da porta
var n_porta_escolhida = parseInt(document.querySelector('input[name="porta"]:checked').value);
console.log('Porta Escolhida:' + n_porta_escolhida);
//O Apresentador abre uma porta nao premiada aleatoria
var n_porta_aberta = abrir_uma_porta(portas, n_porta_escolhida);
console.log('Apresentador abriu porta :' + n_porta_aberta);
//O apresentador da a opcao do jogador trocar de porta
var n_porta_trocada = trocar_porta(n_porta_escolhida, n_porta_aberta);
console.log('Quero trocar p/ :' + n_porta_trocada);
//se o jogador manter a porta escolhida e acertar ganha o carro
if (n_porta_escolhida == n_porta_premiada) {
//quando nunca troca++
ganhou_carro_sem_trocar++;
console.log('Ganhou carro se nao tivesse trocado trocar');
}
else { //senao se ele ganha um bode
ganhou_bode_sem_trocar++;
console.log('Ganhou bode se nao tivesse trocar');
}
//se ele escolhe-se trocar de porta e acertar ganha o carro
if (n_porta_trocada == n_porta_premiada) {
ganhou_carro_trocando++;
console.log('Ganhou carro se tivesse trocado');
} else { //senao ganha o bode kk
ganhou_bode_trocando++;
console.log('Ganhou bode se tivesse trocado');
}
console.log('---------------fim----------------');
updateData();
}
//abre uma porta do bode que nao foi escolhido
function abrir_uma_porta(portas, escolhida) {
var sorteio = Math.round(Math.random()); //1 or 0;
var primeirobode = portas.indexOf('bode');
var ultimobode = portas.lastIndexOf('bode');
//continue..
if (portas[escolhida] == 'carro') {
return sorteio == 0 ? primeirobode : ultimobode;
} else {//e bode
return escolhida == primeirobode ? ultimobode : primeirobode;
}
}
//troca a opcao atual com a porta que nao foi aberta
function trocar_porta(porta_escolhida, porta_aberta) {
var opcao_troca = 0;
if (porta_escolhida == 0 && porta_aberta == 1 || porta_escolhida == 1 && porta_aberta == 0) {
opcao_troca = 2;
} else if (porta_escolhida == 0 && porta_aberta == 2 || porta_escolhida == 2 && porta_aberta == 0) {
opcao_troca = 1;
} else if (porta_escolhida == 1 && porta_aberta == 2 || porta_escolhida == 2 && porta_aberta == 1) {
opcao_troca = 0;
}
return opcao_troca;
}
// Algoritmo de embaralhamento de Fisher–Yates
function embaralhar(array) {
for (var i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
function Reset() {
ganhou_carro_sem_trocar = 0;
ganhou_carro_trocando = 0;
ganhou_bode_sem_trocar = 0;
ganhou_bode_trocando = 0;
console.clear();
updateData();
}
function updateData() {
var changeText = (id, value) => document.getElementById(id).innerHTML = value;
changeText('carroGanhosNuncaTroca', ganhou_carro_sem_trocar);
changeText('carroGanhosSempreTroca', ganhou_carro_trocando);
changeText('bodeGanhosNuncaTroca', ganhou_bode_sem_trocar);
changeText('bodeGanhosSempreTroca', ganhou_bode_trocando);
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment