Dice Cricket es un juego que me presentaron cuando era niño y que he utilizado como una forma de pasar el tiempo durante años. No pude encontrar una página de Wikipedia, así que explicaré las reglas a continuación.
Reglas de cricket de dados
Premisa
Dice Cricket es un juego similar a anotar un juego de cricket mientras lo miras, pero en lugar de mirar y registrar el resultado, estás tirando un dado y registrando el resultado.
Los resultados se registran en una tabla como se muestra en la parte inferior.
Monitor
Dice Cricket utiliza una pantalla específica para mostrar toda la información que ocurre.
La tabla tiene 11 filas. Cada fila representa una masa. El diseño de la fila se explica a continuación.
+------+------------------------------+---------+-----+
| Name | Runs | How Out |Score|
+------+------------------------------+---------+-----+
- Nombre: el nombre debe ser una cadena compuesta completamente de letras, mayúsculas o minúsculas
- Carreras: Un bateador puede enfrentar 30 bolas. Cada bola puede ser una de
1 2 4 6 . /
. Esto se explicará con más detalle a continuación. - How Out: La forma en que la masa estaba fuera. Puede ser cualquiera de
Bowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
- Puntuación: la suma de todos los números en
Runs
Cómo funciona el juego
En un juego, siempre hay 2 bateadores en el campo. El primer jugador es por defecto el bateador actual y el segundo en el bateador "off".
Un juego se compone de "bolas": cada bola en un partido de cricket está representada por una tirada de dados. Cada rollo hace un comando diferente:
- 1,2,4 y 6 hacen que el bateador anote tanto. Si se lanza 1, la masa actual se convierte en la masa "apagada" y la masa "apagada" se convierte en la masa actual
- 3 es una "bola de puntos", lo que significa que no pasa nada. Se representa en la
Runs
sección como a.
y puntúa 0. A0
no se puede usar para representarlo. - 5 es un wicket. Si se lanza 5, el bateador actual está "fuera". Esto significa que
/
se agrega a las carreras y, a partir de ese momento, el bateador no puede anotar más carreras. El bateador se intercambia con el siguiente bateador que no haya bateado. LaHow Out
sección es una elección aleatoria de las posibles formas de salir:Bowled, LBW, Caught
Ejemplo para un wicket (esto es solo por claridad, no es así como se emite)
player a is on 4,6,2,6,4
player b is on 6,4,2,6,6
player c hasn't batted
player a is current batter
WICKET!!!
player a is on 4,6,2,6,4,/
player b in on 6,4,2,6,6
player c is on NOTHING
player c is current batter
Cada 6 bolas, los dos bateadores cambian; la masa actual se convierte en la masa "apagada" y la masa "apagada" se convierte en la masa actual
Si la Runs
sección está llena (30 bolas), la masa está fuera y la How Out
sección está configurada en Retired
. A /
no se coloca al final de la Runs
caja.
Reto real (sí, todas esas eran las reglas del juego)
Su desafío es generar una tabla completa (como el ejemplo al final), dada una lista de nombres. El contenido de la salida debe contener solo la tabla y / o los espacios en blanco iniciales o finales.
Reglas
- Las lagunas estándar no están permitidas
- Los 11 jugadores deberían tener algo en la
Runs
sección. - Solo 1 jugador puede ser
Not Out
. Todos los demás jugadores no retirados deben estar fuera de una elección de[Bowled, LBW, Caught]
- Los nombres pueden tener cualquier longitud entre 1 y 6 que coincida con la expresión regular
A-Za-z
- La línea final en la tabla debe ser la línea total (ver ejemplo)
- No tiene que alinear el texto de la tabla de ninguna manera, pero los separadores de fila y columna deben estar alineados.
Ejemplo
Input:
['Fred', 'Sonya', 'David', 'Ben', 'Cody', 'Hazel', 'Nina', 'Kim', 'Cath', 'Lena', 'Will']
Output:
+------+------------------------------+---------+-----+
| Name | Runs | How Out |Total|
+------+------------------------------+---------+-----+
|Fred |.662/ | Caught | 14 |
+------+------------------------------+---------+-----+
|Sonya |1164/ | Caught | 12 |
+------+------------------------------+---------+-----+
|David |/ | LBW | 0 |
+------+------------------------------+---------+-----+
|Ben |424/ | LBW | 10 |
+------+------------------------------+---------+-----+
|Cody |62/ | Bowled | 8 |
+------+------------------------------+---------+-----+
|Hazel |/ | LBW | 0 |
+------+------------------------------+---------+-----+
|Nina |161.6226166..44261442/ | Caught | 64 |
+------+------------------------------+---------+-----+
|Kim |11/ | Caught | 2 |
+------+------------------------------+---------+-----+
|Cath |6.21/ | LBW | 9 |
+------+------------------------------+---------+-----+
|Lena |/ | Bowled | 0 |
+------+------------------------------+---------+-----+
|Will |2 | Not Out | 2 |
+------+------------------------------+---------+-----+
| Total Runs | 121 |
+-----------------------------------------------+-----+
Respuestas:
Python 3 ,
650621582572588 bytesPruébalo en línea!
Bueno, han pasado más de 24 horas y esto me tomó alrededor de una hora para prepararlo, así que espero no estar FGITW'ing nadie, y no he jugado golf en Python en un tiempo, así que fue divertido (aunque esto es la segunda vez que respondí una de mis propias preguntas con una respuesta larga de Python)
Por favor, siéntase libre de publicar sugerencias de golf, Python no es mi mejor lenguaje para jugar al golf.
-68 bytes gracias a FlipTack !
-8 bytes gracias al Sr. Xcoder
+16 bytes debido a un error
fuente
print
lugar deP
. 2)sum
puede tomar unmap
objeto directamente , no es necesario convertirlo en una lista. 3) En lugar de escribiryield x
dos veces, ¿por qué noyield x
y luego romper si es necesario? 4)T=0
podría colocarse dentro del encabezado de la función. 5) En su última función, ha usado varias líneas nuevas en las que podría usar una línea con punto y coma, por ejemplo, las primeras tres declaraciones, las últimas tres declaraciones y las declaraciones en el bucle for.s
considerablemente ...def s(i=30):
y luegowhile i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i
. Además, solo llamao()
una vez, por lo que no hay necesidad de declararlo, solo use la declaración directamente.b
^^Carbón ,
277255 bytesPruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Lea los 11 nombres (la entrada es flexible: JSON, separados por espacios o separados por nueva línea) y cree una matriz
q
de 11 bateadores, representados por sus bolas (como una matriz), estado (como un entero) y nombre.Crea una copia invertida de los bateadores
h
. Esto representa a los bateadores que no están fuera. Los dos últimos elementos son los bateadores desactivados y los actuales.Repita mientras haya al menos dos bateadores disponibles.
Extraer la masa actual a
i
.Genera una bola al azar
z
.Agréguelo a la lista general de bolas usando la lista vacía predefinida
u
.Agréguelo a las bolas del bateador actual.
Si la bola es un
/
, entonces genera un estado aleatorio2..4
, de lo contrario, si esta es la bola número 30 del bateador, establece el estado en1
otro caso0
.Si la masa está fuera, guarde el estado de la masa; de lo contrario, vuelva a ponerla en el bate.
Si quedan al menos dos bateadores, y el bateador estaba fuera xo se han jugado 6 bolas, entonces ...
... quita los bateadores y los bateadores actuales y vuelve a colocarlos en orden inverso.
Imprime el encabezado.
Pase sobre los batidos.
Escriba el nombre del bateador.
Imprime las bolas de la masa.
Imprima el estado de la masa indexando en la cadena
Not OutRetiredBowled Caught LBW
dividida en subcadenas de longitud 7.Imprime la puntuación del bateador.
Ir al inicio de la siguiente línea, pero una.
Imprime el total.
Dibuja cajas alrededor de todo.
fuente