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 -1
si P1 gana, 0
si es un empate y 1
si 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 Wins
no 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Ṡ
conM
y 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
Inf
para P1,NaN
para un empate,-Inf
para P2.Utiliza la función auxiliar
f
que calcula una puntuación para cada mano. El puntaje se define de la siguiente manera:d
sea el dígito que más se repite yn
el número de veces que se repite. Entonces el puntaje es6*n+d
si hay al menos un as, y0
si 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+Infinity
para P1,-Infinity
para P2 oNaN
para 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í.W
no es realmente necesario,6L¢¬Ā*
es el mismo conteo de bytes queWΘ*6L¢
.W
sin 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
1
para P1,0
para empate y-1
para P2.-1 byte, gracias al calamar
fuente
1
yin
puede irPerl 6 ,
6049 bytesPruébalo en línea!
Retornos
More
,Same
,Less
paraP1 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-1
para la victoria de P1,1
para P2 o0
para 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
1
si gana P1;-1
si P2 gana;0
si 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=6
yi=1
. Esto puede ser justo*i
(y dejar de bucle cuando llegue a 2).9
puede ser cualquier número mágico entre5
y 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
-1
si el jugador 1 gana,0
para un empate y1
si el jugador 2 gana. Explicación:Reemplace cada mano con la cuenta de cuántas veces
6..1
aparecen 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 de1
s. El recuento de1
s 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
1
s a los recuentos para6..2
, pero establezca todos los recuentos en cero si el recuento de1
s 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,
6
ya 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
0
deseado).fuente
C (gcc) / 32 bit, 117 bytes
Pruébalo en línea!
Toma dos matrices enteras terminadas en cero. Retornos
1
,0
,-1
paraP1 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:
1
La línea uno gana0
Corbata-1
Línea dos victoriasfuente