Created
October 21, 2020 23:37
-
-
Save caiorn/378fe36972b8f7405d1b391414f3c1b2 to your computer and use it in GitHub Desktop.
Problema de Monty Hall
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!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