Reto
Bar Dice es un juego simple que se juega en un Bar with Dice (de ahí el nombre). Tira 5 dados de seis lados e intenta hacer la mejor mano.
La puntuación se basa en acumular el mayor número de dados con los mismos dígitos. Cada mano debe incluir al menos un solo "As", o uno, para ser una mano válida; Los ases actúan como "comodines" y pueden combinarse con cualquier otro dígito. La fuerza de la mano de un jugador depende primero del número de dígitos y luego del valor de esos dígitos. Como ejemplo, una mano (contando comodines) con cuatro 3 es mejor que una mano con tres 5, pero no mejor que una mano con cinco 2.
Tomado del artículo de Wikipedia
Esto significa que la mano mejor clasificada está compuesta por 6 y 1, y la mano más baja es cualquier mano sin un 1.
Su desafío es tomar dos manos y devolver qué jugador ganó, o si empataron.
Entrada
Dos listas sin clasificar de 5 números, que van del 1 al 6. Cada lista representa la mano de un jugador. El formato de entrada es flexible.
Salida
Cualquier tres valores estáticos distintos pero consistentes (los rangos no están permitidos) que significan si el jugador 1 o el jugador 2 ganaron, o si fue un empate. Indique en su respuesta qué valores está utilizando para qué. Por ejemplo, puede regresar -1si P1 gana, 0si es un empate y 1si P2 gana.
Reglas
- La entrada siempre será válida
- Solo se utiliza el mejor puntaje posible de cada mano para determinar un ganador. No hay desempates. Por ejemplo,
[1,4,4,3,3]empatará en[1,4,4,2,2]lugar de usar los 3 y 2 como un desempate. - La salida debe ser uno de los 3 valores elegidos cada vez. Simplemente mapear todos los números negativos
P1 Winsno está permitido y debe normalizarse. - Las manos inválidas, es decir, las que no tienen un 1, pierden con todas las manos válidas pero empatan con todas las demás manos inválidas. Por ejemplo,
[2,2,2,2,2]corbatas[3,3,3,3,3]. - Una mano de
[1,1,1,1,1]cuenta como un conjunto válido de 6 para fines de clasificación. - Este es el código de golf, por lo que el conteo de bytes más corto gana.
Ejemplos
#You guys are pretty good at finding edge-cases that break things. Good job!
Input: [2,1,5,6,6], [6,2,6,6,6]
Output: P1 Wins
Input: [2,4,5,6,6], [6,2,6,6,6]
Output: Tie
Input: [1,2,3,4,5], [5,4,3,2,1]
Output: Tie
Input: [1,5,5,3,2], [5,4,1,6,6]
Output: P2 Wins
Input: [3,2,2,2,1], [4,1,3,6,6]
Output: P1 Wins
Input: [1,1,1,1,1], [6,1,1,6,6]
Output: Tie
Input: [1,3,3,4,4], [1,2,2,5,5]
Output: P2 Wins
Input: [1,3,3,5,5], [1,3,3,2,2]
Output: P1 Wins
Input: [1,3,3,3,4], [1,1,3,3,3]
Output: P2 Wins
Input: [2,2,2,6,1], [5,3,3,1,2]
Output: P1 Wins
Input: [5,5,5,1,5], [1,1,1,1,1]
Output: P2 Wins
Input: [1,1,1,1,1], [1,1,5,1,1]
Output: P1 Wins
fuente

IṠconMy generar una lista de los ganadores.Ḍahora también puede ser redundante ya que las listas se ordenan igual que los enteros.R ,
11596 bytes-6 bytes gracias a Giuseppe.
-6 bytes gracias a Aaron Hayman.
-2 bytes gracias a Arnauld, siguiendo el formato de salida en su respuesta de JavaScript .
Pruébalo en línea!
Devoluciones
Infpara P1,NaNpara un empate,-Infpara P2.Utiliza la función auxiliar
fque calcula una puntuación para cada mano. El puntaje se define de la siguiente manera:dsea el dígito que más se repite ynel número de veces que se repite. Entonces el puntaje es6*n+dsi hay al menos un as, y0si no hay ases. Entonces solo necesitamos encontrar al jugador con la puntuación más alta.Sin golf:
fuente
order(l)[5]lugar demax.col(t(l),"l")obtener una solución de 96 bytes: ¡ Pruébelo en línea!JavaScript (ES6),
9790 bytesToma entrada como
(a)(b). Devoluciones+Infinitypara P1,-Infinitypara P2 oNaNpara un empate.Pruébalo en línea!
Comentado
fuente
05AB1E ,
1615 bytes-1 byte gracias a JonathanAllan
Pruébalo en línea!
Devuelve [1, 0] para P1 gana, [1, 1] para empates, [0, 1] para P2 gana.
En lugar de usar el orden lexicográfico en una tupla de 2 (conteo de dados, valor de dados), esto calcula el puntaje como 10 ** recuento de dados * valor de dados. Manos sin 1 puntaje 5.
fuente
ć+(ahora que lo veo no puedo creer que no haya pensado en eso ...)! Eso es mucho mejor de lo que estaba intentando ... Tuve una idea similar con°. :) Excepto que ya estaba en 20 bytes y todavía tenía que solucionar un problema para el caso de prueba[[1,1,1,1,1],] [6,1,1,6,6]]... Así que gracias por ahorrarme tiempo para poder poner mi intento en el basurero ...; pć+funciona. Mi idea inicial comenzó conæʒW}ʒ1KË, pero el[1,1,1,1,1]problema lo mata .ε1¢©Āy{γéθ¬sg®+°P}`.S, pero también lo[1,1,1,1,1]arruinó. Toda su respuesta tiene un buen sinergia con elWΘ*,6L¢,ć+, y°ƶ. Especialmente los constructoresWćƶrealmente muestran su fuerza aquí.Wno es realmente necesario,6L¢¬Ā*es el mismo conteo de bytes queWΘ*6L¢.Wsin estallar y luego*mostró su fuerza, pero¬sin estallar y luego*es básicamente lo mismo. El hecho de que no explote es la fuerza que estaba implicando, guardar un byte. Pero es de hecho principalmentećƶ.Python 2 ,
858180 bytesPruébalo en línea!
Devuelve
1para P1,0para empate y-1para P2.-1 byte, gracias al calamar
fuente
1yinpuede irPerl 6 ,
6049 bytesPruébalo en línea!
Retornos
More,Same,LessparaP1 Wins,Tie,P2 Wins.Explicación
fuente
Consulta T-SQL, 148 bytes
Usando la variable de tabla como entrada
Pruébalo en línea
fuente
Jalea , 21 bytes
aplastado incluso antes de que lo publicara Nick Kennedy :)
Un enlace monádico que acepta una lista de jugadores que genera una lista de ganadores (indexados).
Entonces P1 es
[1], P2 es[2]y un empate es[1,2].Pruébalo en línea!
fuente
PowerShell ,
112126123121 bytesToma entrada como
(a)(b). Retornos-1para la victoria de P1,1para P2 o0para un empate.Pruébalo en línea!
Caso de prueba
@( @(1,1,5,1,1), @(1,1,1,1,1), 1)agregado.Desenrollado:
fuente
Wolfram Language (Mathematica) ,
787574 bytes-1 byte por Greg Martin
Pruébalo en línea!
Produce -1 cuando el jugador 1 gana, 1 cuando gana el jugador 2 y 0 para un empate.
fuente
FreeQ[#,1]con#~FreeQ~1.Java 8,
244240236215199 bytes-4 bytes gracias a @someone .
-21 bytes gracias a @Neil .
-16 bytes gracias a @ceilingcat .
Devoluciones
1si gana P1;-1si P2 gana;0si es un empatePruébalo en línea.
Explicación:
fuente
...*(c[p][1]>0?1:0)conc[p][1]>0?...:0. No puedo publicar un enlace TIO, ya que es demasiado largo y no quiero acortarlo. La versión sin golf tiene paréntesis desequilibrados en algún lugar por allí.c[p][1]>0?cheque más tarde como corrección de errores, pero aparentemente sin pensarlo mucho. Gracias por el -4. :)*(i<2?6:i)? Solo estás duplicando el esfuerzo parai=6yi=1. Esto puede ser justo*i(y dejar de bucle cuando llegue a 2).9puede ser cualquier número mágico entre5y alrededor32, ¿verdad? Si usa8, en lugar de(int)Math.pow(8,(...)*i)puede usari<<3*(...).a->b->{int c[][]=new int[2][7],m[]=new int[2],s,p,i=5;for(;i-->0;c[1][b[i]]++)c[0][a[i]]++;for(i=7;i-->2;)for(p=2;p-->0;m[p]=s>m[p]?s:m[p])s=c[p][1]>0?i+9*(c[p][i]+(i>1?c[p][1]:0)):0;return Long.compare(m[0],m[1]);}que parece pasar todos sus casos de prueba ...Jalea , 27 bytes
Pruébalo en línea!
1 para P1, -1 para P2, 0 para empate
Explicación
fuente
Almádena 0.4 , 27 bytes
Se descomprime en esta función Wolfram Language:
que resulta ser exactamente lo mismo que mi respuesta de Mathematica .
fuente
Carbón ,
4845 bytesPruébalo en línea! El enlace es a la versión detallada del código. Toma entrada como una matriz de matrices y salidas
-1si el jugador 1 gana,0para un empate y1si el jugador 2 gana. Explicación:Reemplace cada mano con la cuenta de cuántas veces
6..1aparecen los valores en la mano. La lista se invierte porque a) hace que sea más fácil encontrar el valor más alto con la cuenta más alta yb) hace que sea más fácil eliminar la cuenta de1s. El recuento de1s se duplica porque debe eliminarse dos veces, una para verificar que no es cero y otra para agregarlo a los otros recuentos.Agregue el recuento de
1s a los recuentos para6..2, pero establezca todos los recuentos en cero si el recuento de1s fue cero.Para cada mano, encuentre el conteo más alto y el valor más alto con ese conteo. (En realidad, encontramos el valor menos,
6ya que es más golfista)Determine qué mano ganó restando las posiciones de las manos ganadoras y perdedoras. (Si las manos están empatadas, la primera mano gana y pierde, por lo que el resultado es el
0deseado).fuente
C (gcc) / 32 bit, 117 bytes
Pruébalo en línea!
Toma dos matrices enteras terminadas en cero. Retornos
1,0,-1paraP1 Wins,P2 Wins,Tie.fuente
J ,
4744 bytesPruébalo en línea!
Inspirado por la idea de Nick Kennedy.
sin golf
fuente
Perl 5
-MList::Util=max -pl, 80 bytesPruébalo en línea!
Entrada:
Cada jugador en una línea separada, sin espacios
Salida:
1La línea uno gana0Corbata-1Línea dos victoriasfuente