421 es un juego de dados bastante popular en Francia y otros países europeos. Se juega principalmente en bares y pubs para determinar quién va a comprar la próxima ronda de bebidas. El juego completo generalmente se juega en dos rondas, con fichas de las que cada jugador intenta deshacerse, pero esto es irrelevante aquí. ( Página de Wikipedia en francés).
El juego se juega con 3 dados de cubo estándar.
Tarea
Su tarea es ordenar una lista no vacía de tiradas distintas de 3 dados [X, Y, Z] de mayor a menor, aplicando las reglas de puntuación de este juego.
Puntuación básica
- 4,2,1 es la combinación más alta posible. Dependiendo de las reglas, puede obtener 8, 10 u 11 puntos. Debido a que estamos clasificando los rollos en lugar de contar los puntos, el valor exacto no importa.
- Tres ases: 1,1,1 es la segunda combinación más alta y obtiene 7 puntos.
- Dos ases: X, 1,1 (donde X es de 2 a 6) obtiene X puntos.
- Trío: X, X, X (donde X es de 2 a 6) obtiene X puntos.
- Rectas: X, X + 1, X + 2 obtienen 2 puntos.
- Todos los otros rollos obtienen 1 punto.
Liquidación de lazos
Siempre que dos tiradas den el mismo número de puntos, se aplican las siguientes reglas:
- Un Two-Aces es mejor que un Three-of-a-Kind. Ejemplo: 5,1,1 vence a 5,5,5 .
- El Three-of-a-Kind 2,2,2 es mejor que una escalera. Ejemplo: 2,2,2 latidos 4,5,6 .
- Las rectas se ordenan de menor a mayor. Ejemplo: 4,5,6 latidos 2,3,4 .
- Todas las otras tiradas se resuelven clasificando los dados de mayor a menor. Ejemplo: 6,5,2 latidos 6,4,3 . (Por lo tanto, la combinación más baja posible en el juego es 2,2,1 .)
A continuación se muestran los 56 rollos distintos posibles ordenados de mayor a menor:
421 111 611 666 511 555 411 444 311 333 211 222 654 543 432 321
665 664 663 662 661 655 653 652 651 644 643 642 641 633 632 631
622 621 554 553 552 551 544 542 541 533 532 531 522 521 443 442
441 433 431 422 332 331 322 221
Reglas de desafío
- Puede tomar los rollos en cualquier formato razonable, como una lista de listas
[[3,2,1],[4,2,1]]
, una lista de cadenas["321","421"]
, una lista de enteros[321,421]
, etc. Sin embargo, cada dado debe ser claramente identificable con un valor del 1 al 6 . - Para cada lanzamiento, puede suponer que los dados se ordenan de menor a mayor o de mayor a menor, siempre que sean consistentes. Indique en su respuesta el orden que espera, si corresponde.
- ¡La respuesta más corta en bytes gana!
Casos de prueba
Usando listas de cadenas con los dados ordenados de mayor a menor:
Entradas
[ "321", "654" ]
[ "222", "321", "211" ]
[ "333", "311", "331", "111" ]
[ "111", "222", "333", "444" ]
[ "321", "421", "521", "621" ]
[ "422", "221", "442", "421", "222" ]
[ "222", "111", "421", "211", "651", "652", "543" ]
Resultados esperados
[ "654", "321" ]
[ "211", "222", "321" ]
[ "111", "311", "333", "331" ]
[ "111", "444", "333", "222" ]
[ "421", "321", "621", "521" ]
[ "421", "222", "442", "422", "221" ]
[ "421", "111", "211", "222", "543", "652", "651" ]
012
lugar de123
)?Respuestas:
Python , 93 bytes
Pruébalo en línea!
fuente
sort
método.Retina 0.8.2 , 67 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación: La clave de clasificación numérica se genera de la siguiente manera:
fuente
Jalea ,
3734 bytesUn enlace monádico que acepta una lista de listas de tiradas de dados (cada una ordenada descendente) que produce las tiradas ordenadas descendentes.
Pruébalo en línea! O vea un conjunto de pruebas ... o pruebe todos los rollos ordenados lexicográficamente
¿Cómo?
Este método genera una lista de todos los rodillos de mayor a menor *, sustituyendo
[4,2,1]
con0
(un rodillo de entrada no válida), a fin de clasificar cada rollo usando primero-index-de átomo de jalea,i
.* La lista también incluye repeticiones y entradas redundantes que no afectarán el comportamiento:
fuente
R , 73 bytes
Pruébalo en línea!
421 ... 221
)x % 37
lugar de111
Explicación
Para cada uno de los números, se calculan 5 teclas y se usan jerárquicamente para ordenar la matriz:
fuente
05AB1E ,
764845 bytesResultó ser mucho más largo de lo esperado, pero al menos es fácil de implementar. Veré si puedo encontrar una mejor solución. Hicela lista a mano ahora, pero aún un poco larga.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Aquí está la lista real que genera la primera parte del código:
Pruébalo en línea.
Como puede ver, contiene elementos vacíos; números como
765
o210
; y números en el rango[216, 112]
. Pero todos podemos ignorarlos, porque los elementos que queremos clasificar están en el orden correcto.Solución original de 76 bytes:
Pruébelo en línea
o verifique todos los casos de prueba(no hay un conjunto de pruebas porque todavía hay un error con la clasificación por números comprimidos que no ven el soporte de cierre para detener la clasificación) ).Explicación:
explicación
•X˜„Éε´õñ€9Ú ù?ä0₅9úd5àPÎøŒccuĆYÑ,o¾eíË¿¼À8@gID=vÆOΣxjF¨O‡J₃^εR™\èv•667в
:Todo entre los dos
•
es un número comprimido que se genera con el siguiente programa:Pruébalo en línea.
Z>
: Tome el máximo de la lista + 1 (667
en este caso)β
: Convierta la lista de Base667
a un solo número255B
: Y convierta ese número único en base255
(usando la página de códigos 05AB1E), para que tengamos nuestro número comprimido .Al usarlo
667в
, este número comprimido vuelve a la lista original.fuente
JavaScript (ES7), 96 bytes
Ordena los rollos siguiendo estrictamente las reglas de puntuación. Espera una serie de cadenas con rollos individuales en orden descendente de valor, por ejemplo
["654"]
Pruébalo en línea!
Explicación
Las categorías de rollos se elevan a los siguientes exponentes:
Sin golf
Mentalmente desenvolver los cheques condicionales me da dolor de cabeza, y estoy seguro de que de alguna manera se puede seguir jugando ...
fuente
Javascript, 101 caracteres, 116 bytes (UTF-8)
Toma una serie de números que representan los rollos como
[ 321, 654 ]
.Pruébalo en línea!
Explicación:
Tomé el primer 16 de los 56 posibles rollos distintas (las que en realidad no sigue ningún orden) y les codificado como una cadena:
"ƥoɣʚǿȫƛƼķōÓÞʎȟưŁ"
. Cada carácter de esta cadena corresponde a los primeros 16 rollos posibles (ƥ
es421
,o
es111
, ...). Ahora, para cada dos elementosa
yb
de la matriz, solo verificamos su índice de la cadena, si están incluidos, se usa el índice; de lo contrario (el índice es-1
), usamos el número de rollo en sí (lo restamos700
para invertir el orden de no incluidos, es decir , ordenarlos en orden decreciente).fuente
Limpio ,
169102 bytesTodos los escapes octales se cuentan como un byte, ya que el compilador Clean los tomará felizmente de esa manera, pero TIO y SE no lo harán porque no están bien formados UTF-8.
Pruébalo en línea!
Utiliza el hecho de que todas las tiradas de dados, como números enteros módulo 256, son únicas.
Convenientemente,
Char
se trata (principalmente) como un módulo entero de 256.fuente
Pyth , 48 bytes
Espera entrada como una matriz anidada, cada elemento ordenado descendente. Pruébelo en línea aquí , o verifique todos los casos de prueba a la vez aquí .
fuente
05AB1E , 24 bytes
Pruébalo en línea!
Algoritmo general:
Detalles:
fuente