Craps é um jogo de dados bastante simples, geralmente jogado em cassinos. Mesmo se você não é um jogador (o que eu não sou), ainda é um jogo bastante interessante. Aqui estão as regras:
No início de um jogo de Craps, há o que é chamado de rodada final. O jogador joga dois d6s (dado de seis lados) e os dois dados do dado são adicionados. Se o resultado for 7 ou 11, a pessoa vence automaticamente (isso é conhecido como natural ). Se o resultado for 2, 3 ou 12, a pessoa perde automaticamente (isso é conhecido como porcaria ). Caso contrário, o resultado será definido como o ponto para a ronda de pontos.
Depois disso, a rodada de pontos começa. Durante a rodada de pontos, o jogador deve rolar continuamente 2 d6s até que a pessoa gere 7 ou seu ponto da rodada anterior. Se a pessoa obtiver 7, eles perderão. Se eles argumentarem, eles vencem.
Desafio
Implemente um programa simples que simule um jogo de craps. Se a pessoa fizer uma rolagem natural ou porcaria durante a rodada de saída, o programa deve exibir "Natural:" ou "Crapping out:", seguido pela rolagem e depois sair. Caso contrário, ele deve gerar "Ponto:" seguido pelo ponto. Então, durante a rodada de pontos, ele deve gerar todos os dados até que um 7 ou o ponto seja alcançado. Se a pessoa vencer, deve produzir "Pass"
; se eles perdem deve sair "Don't Pass"
.
Implementação de referência
Groovy, 277 bytes
def a={return Math.random()*6+1};int b=a()+a();(b<4||b==12)?{println"Crapping out: "+b}():{(b==7||b==11)?{println"Natural: "+b}():{println"Point: "+b;for(;;){int x=a()+a();println x;(x==7)?{println"Don't Pass";System.exit(0)}():{if(x==b){println"Pass";System.exit(0)}}()}}()}()
Saídas de amostra
Natural: 7
Crapping out: 3
Point: 9
4
8
11
9
Pass
e
Point: 5
3
7
Don't Pass
Isso é código-golfe , então o código mais curto vence.
(AVISO LEGAL: Este desafio não se destina a promover o jogo de forma alguma. Lembre-se de que a casa sempre vence.)
You can't make your program shorter by picking a random number between 1 and 12 for the die roll; it must be two numbers picked between 1 and 6.
- Que tal escolher um valor aleatório em [1, 12] de uma distribuição idêntica à adição de dois valores aleatórios uniformes em [1, 6]?