Eu nunca fui capaz de entender o problema de Monty Hall . Aqui está a premissa:
Suponha que você esteja em um game show e tenha a opção de três portas: Atrás de uma porta está um carro; atrás dos outros, cabras. Você escolhe uma porta, digamos o número 1, e o anfitrião, que sabe o que está por trás das portas, abre outra porta, digamos o número 3, que tem uma cabra. Ele então diz para você: "Você quer pegar a porta número 2?" É a sua vantagem mudar sua escolha?
Execute 10.000 simulações. Saída da porcentagem de ganho de comutação. Por exemplo:
> 66.66733%
Respostas:
JavaScript 52
As portas são 1: [0,1 / 3), 2: [1 / 3,2 / 3), 3: [2/3, 1)
Suponha que o prêmio esteja sempre na porta 3. Se o hóspede pegar as portas 1 ou 2, que é o intervalo [0,2 / 3), e trocar, ele ganhou o prêmio.
fonte
i=s=0;s+=Math.random()<2/3while i++<1e4;alert s/100
J:
1715Ele escolhe uma porta aleatória - vamos rotular esses 0, 1 ou 2 onde 2 é a porta do carro - e calcula o benefício de alternar com base nessa lógica:
1
).1
).0
).Em seguida, calcula o resultado como a soma da matriz anterior, dividida por 100.
Estou bastante instável com J, então tenho certeza de que isso poderia ser melhorado ainda mais.
fonte
R
115100A resposta da pseudo-simulação tem 23 caracteres:
mas aqui está uma simulação real:
D
são as portas possíveisS
é uma função para selecionar aleatoriamente um item de um vetorC
é a porta do carro (aleatória entreD
)P
é a porta escolhida pelo jogador (aleatória entreD
)H
é a porta escolhida pelo host (aleatória entreD
menosC
eP
)F
é a porta final escolhida pelo jogador (determinística:D
menosP
eH
)C==F
.retornos: [1] 66.731
Editar
Eu posso salvar alguns caracteres não atribuindo a variáveis e assumindo sem perda de generalidade que
C==1
:fonte
Perl,
988983757271 caracteresAqui está uma resposta séria que realmente executa a simulação:
Em cada iteração de loop, a escolha inicial do jogador é sempre a porta 2. Primeiro, a porta do carro é armazenada e
$%
, em seguida, uma porta diferente é selecionada para Monty Hall expor. Se a porta restante for igual a$%
, a rodada será ganha.(Variáveis de pontuação do Perl
$%
e$=
são usadas porque fazem truncamento inteiro gratuitamente).fonte
Powershell -
168131125115Código de golfe:
Algumas notas:
Este script deve ser o mais conciso possível, além de ser o mais simulação possível do cenário de Monty Hall. Não faz suposições sobre onde o carro estará ou qual porta o jogador escolherá primeiro. Nem sequer são feitas suposições para qual porta específica o host escolherá em qualquer cenário. As únicas suposições restantes são aquelas que são realmente declaradas no problema de Monty Hall:
Ungolfed, com comentários:
Eu executei esse script várias vezes e sempre gera resultados muito próximos da probabilidade de dois terços. Algumas amostras:
(Como acima)
(Usando
Get-Random
como a definição de alias, em vez de apenasRandom
)fonte
Ruby
484038Meu código não faz nenhuma suposição sobre qual porta o prêmio estará sempre atrás ou qual porta o jogador sempre abrirá. Em vez disso, concentrei-me no que faz o jogador perder. Conforme o artigo da Wikipedia :
Então, para simular isso (em vez de usar valores fixos), eu o modelei da seguinte forma:
O código v1:
O código v3 (graças a steenslag e Iszi!):
Alguns exemplos de valores de retorno:
fonte
p (1..10000).count{rand(3)!=rand(3)}/1e2
salva alguns caracteres.1e4
para10000
?Mathematica 42
fonte
PowerShell, 90
Comentado:
fonte
1e4
vez de10000
.C,
10195Isso é para a simulação real. Para alguns códigos baratos de flexão de regras, são apenas
716559:Eu não fiz srand () porque as regras não diziam que eu precisava. Além disso, a versão mais barata imprime cerca de 30.000 números extras porque salva um caractere. Provavelmente estou perdendo alguns truques, mas fiz o melhor que pude.
fonte
main
e você pode descartar as=0
inicializações.Python 2:
72 6664Exemplo de saída: 66,49
fonte
exec"i-=randint(0,2)&1;"*i
vez dofor
loop.print.01*i
vez deprint i/100.
.Peixe -
4643Isso está usando as mesmas suposições que Tristin fez:
A direção para baixo em
x
representa você inicialmente escolhendo a porta correta, esquerda e direita são os casos em que você escolheu uma porta diferente, e acima não é nada e rolará novamente.Inicialmente, eu inicializei
10000
com"dd"*
, mas"dd"
tinha que estar todos na mesma linha, e perdi algum espaço em branco. Serpenteandoaa*a*a*
eu consegui remover uma coluna e, finalmente, 3 caracteres. Ainda há um pouco de espaço em branco que eu não consegui me livrar, acho que isso é muito bom!fonte
PHP 140
Mas acho que isso não está funcionando direito. Alguma dica? Estou recebendo valores de 49 a 50.
fonte
Linguagem do Game Maker, 19 (51 w / loop)
Emite 66,67! Esta é a probabilidade correta;)
O código de modo sério, 51 caracteres:
Certifique-se de compilar com tratar todas as variáveis não inicializadas como 0.
O código mais antigo, 59 caracteres:
Novamente, certifique-se de compilar com tratar todas as variáveis não inicializadas como 0.
A saída foi
66.23
fonte