Craps es un juego de dados bastante simple que a menudo se juega en los casinos. Incluso si no eres un jugador (que yo no soy), sigue siendo un juego bastante interesante. Aquí están las reglas:
Al comienzo de un juego de dados no es lo que se llama el de Salida ronda. El jugador tira dos d6s (dado de seis lados) y se suman las dos tiradas de dado. Si el resultado es 7 u 11, la persona gana automáticamente (esto se conoce como natural ). Si el resultado es 2, 3 o 12, la persona pierde automáticamente (esto se conoce como basura ). De lo contrario, el resultado se establece como el punto para la ronda de puntos.
Después de esto, comienza la ronda de puntos . Durante la ronda de puntos, el jugador debe tirar continuamente 2 d6s hasta que la persona saque un 7 o su punto de la ronda anterior. Si la persona saca un 7, pierde. Si sacan su punto, ganan.
Desafío
Implemente un programa simple que simule un juego de dados. Si la persona lanza un natural o una basura durante la ronda de salida, el programa debería mostrar "Natural:" o "Recorte:" seguido por la tirada del dado y luego salir. De lo contrario, debería mostrar "Punto:" seguido del punto. Luego, durante la ronda de puntos, debería generar cada tirada hasta que se alcance un 7 o el punto. Si la persona gana, debería salir "Pass"
; si lo pierden debería salir "Don't Pass"
.
Implementación de referencia
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)}}()}}()}()
Resultados de muestra
Natural: 7
Crapping out: 3
Point: 9
4
8
11
9
Pass
y
Point: 5
3
7
Don't Pass
Este es el código de golf , por lo que gana el código más corto.
(DESCARGO DE RESPONSABILIDAD: Este desafío no pretende promover el juego de ninguna manera. Recuerde, la casa siempre gana).
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.
- ¿Qué pasa con elegir un valor aleatorio en [1, 12] de una distribución que es idéntica a sumar dos valores aleatorios uniformes en [1, 6]?Respuestas:
Rubí 164
Muy claro. Características interesantes:
Los casos de eliminación se resumen como
r%12<4
y los casos naturales restantes se resumen comor%4==3
.La cadena inicial se almacena
c
y se toman rollos adicionales solo si esto es posterior alfabéticamente a la letra única?P
(que solo ocurre paraPoint
).fuente
Python 3, 190 bytes
Esto se basa en la respuesta de Celeo ; Reemplacé algunos condicionales largos con un número mágico que codifica un LUT para cada número, reutilicé una variable e hice algunos otros campos de golf diversos. Todavía hay espacio para el golf; Probablemente sea posible llegar a menos de 170.
No intenté usar Python 2, así que no sé si sería más corto.
fuente
C99
366312293277 bytesEsta es mi primera publicación aquí, así que supongo que esto se puede mejorar mucho.
Versión ampliada
Como puede ver, aquí hay una buena cantidad de redundancia que probablemente se pueda eliminar.
Créditos a @Mego por ayudar a hacer esto más pequeño.
fuente
a
yb
uso del método de resta junto con operadores ternarios.Python 2,
226224 bytesPrimer pase y hay mucho código allí:
¡Gracias a Mego por 2 bytes!
fuente
PHP
230228218199192188 bytes186 bytes sin el
<?
Primer intento de código de golf! Sin
</br>
embargo, ¿ no está seguro si se permitiría usar ? Como esto no funcionaría en una consola (como una nueva línea). Avíseme si esto no está permitido y alterará mi código.EDITAR (16-8-16): Después de mejorar en codegolf noté algunas posibles mejoras. Esto todavía funciona usando la interfaz de línea de comando. Reemplazado
</br>
con una entrada difícil.fuente
Javascript 262
fuente
Perl 5 , 140 bytes
Pruébalo en línea!
fuente
PowerShell ,
181183179178167165 bytes-10 bytes gracias a mazzy
-2 bytes gracias a Xcali
Pruébalo en línea!
Versión desenrollada:
Hay algunos puntos menos problemáticos ahora que la lógica de creación de listas se ha reconstruido en un interruptor. Creo que sigue siendo un enfoque bastante bueno. +2 bytes arreglando un error.
fuente
-notin (7,$z)
no es relevante para la reglaDuring the point round, the player must continuously roll ... the previous round
. Ahora el ciclo termina cuando$m
es igual7
o la primera ronda.Come-out
ronda y ese es su número objetivo para toda laPoint
ronda. El seprevious round
refiere a laCome-out
ronda1?
expresión regular de tus dados.R, 197 bytes
Sin golf
fuente
Pyth , 108 bytes
Pruébalo en línea!
Primer pase, probablemente pueda encontrar algunos ahorros.
fuente
Encantamientos rúnicos , 151 bytes
Pruébalo en línea!
Después de corregir un error con respecto a los números aleatorios (se volvía a sembrar cada vez que
'RA
se llamaba, y la semilla era la hora del sistema, lo que resulta en ejecuciones masivas de valores repetidos) esto funciona correctamente.Explicación
La entrada está en la segunda línea, ya que la primera línea hasta
B͍
es una función para tirar dos dados y sumarlos.Flujo de programa, con algunas envolturas de bordes y redirecciones curvadas desenrolladas para facilitar la lectura.
Solo hay 4 instrucciones NOP (
{:}≠...?\.6?
) que serían muy difíciles de eliminar debido al espacio requerido en otras líneas (es decir, la longitud de la"Don't "
cadena).fuente