Aqueles de vocês que gostam de Numberphile estariam familiarizados com o Dr. James Grime, que descreveu um jogo de dados não transitivo em seu canal .
O jogo consiste em três dados de 6 faces:
- Morrer 1: 3,3,3,3,3,6
- Die 2: 2,2,2,5,5,5
- Die 3: 1,4,4,4,4,4
Dois jogadores selecionam um dado para usar. Eles os rolam e o dado mais alto ganha, o melhor de tudo.
Probabilisticamente, o dado 1 vence o dado 2 com uma chance> 50%. Da mesma forma, os dados 2 batimentos morrem 3 e, curiosamente, dados 3 batimentos morrem 1.
Escrever uma tomada de programa 1
, 2
ou 3
como entrada. Isso indica o dado que o usuário escolhe. O programa escolhe o dado que venceria o usuário e produziria os resultados de 21 rolos e " Computer/User wins with x points
"
Regras
- Code-golf, votos como desempate
- Você deve usar o RNG (ou similares) para simular os lançamentos de dados.
- Eu não sou muito rigoroso no formato de saída. Tudo bem, desde que você mostre os dados, de alguma forma separe entre as 21 jogadas (de uma maneira diferente de como você separa os dados na mesma jogada) e solte a frase acima.
- A entrada pode ser stdin, argumento de linha de comando, na tela etc.
Exemplo
Entrada
1
Resultado
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 6
1 3
4 3
4 3
1 3
4 3
1 3
4 3
4 3
4 3
4 3
4 6
Computer wins with 16 points
Aqui, o usuário escolhe o dado 1 e seus rolos são mostrados na coluna da direita. O programa escolhe o dado 3 e o vence.
|Z-21×X
que não altera a contagem de caracteresR - 228
Exemplo de execução:
fonte
summary.factor
portable
, salvando 9 caracteres.Mathematica
208172166159Espaços adicionados para maior clareza
fonte
Rubi 1.8, 165
getc
obtém o valor ascii da entrada (somente ruby 1.8), que felizmente é o módulo 3 congruente em relação ao seu valor inteiro.s
inicia às 21, entãos.times{code}
executacode
21 vezes e retorna 21. A cada iteração, o loop adiciona ou subtrai 1 de s, dependendo de quem vence, para que possamos ver quem venceu, verificando ses
terminou abaixo de 21. Limpo até agora , mas preciso da expressão desajeitada[s/=2,21-s].max
para extrair o número real de pontos. Há muito tempo eu queria fazer aritmética com o valor de retorno<=>
, então estou feliz de qualquer maneira.fonte
Mathematica
234247Código
Uso
Explicação
n
é o número 1, 2 ou 3 que corresponde ao dado do jogador. Como n também determina (mas não é igual) o dado do computador, podemos gerar todos os lançamentos possíveis dos dados quando n = 1, n = 2, n = 3. Também podemos determinar suas respectivas probabilidades.Examine os dados logo após
RandomChoice
:Se o jogador empata o dado 1, os únicos resultados possíveis são os seguintes 4 pares
{{3, 1}, {3, 4}, {6, 1}, {6, 4}}
As respectivas probabilidades desses pares são
{5, 25, 1, 5}/36
, isso é,{5/36, 25/36, 1/36, 5/36}
RandomChoice[<data>, 21]
produz 21 jogadas dos dois dados.fonte
C,
205191Lê a escolha do usuário em stdin.
fonte
for(c=51-getchar(p=0);
,printf("%ser wins
), expressão de reabastecimento emr
começar com(
e economizar espaço.(c+1)%3
->-~c%3
, façap
estático (inicializado com 0), remova{}
depoisfor
(;
->,
dentro deles), usep<11?:
duas vezes dentro emprintf
vez de atribuirp,q
.s,q
no loopprintf
e incrementarp
depois, economizando parênteses. Altere também ac
atribuição para usar%3
or%7
, fornecendo uma ordem diferente de 0,1,2.Fator
Com inclui: 388
Sem: 300
Sim, o Factor não é realmente o idioma a ser usado no golfe, mas é legal.
fonte
Python 182
fonte
R 206
fonte