Cuando era niño, solía jugar mucho a este juego.
Reglas
Hay dos jugadores (llamémoslos A y B), y cada jugador usa sus manos como pistolas. Hay tres movimientos posibles:
Manos arriba para cargar municiones a tu arma.
Cada arma comienza vacía. La carga aumenta la munición en uno.
Manos apuntando al otro jugador para disparar.
Esto disminuye la munición en uno. Debes tener al menos una unidad de munición para disparar.
Brazos cruzados para protegerse de un disparo.
Ambos jugadores se mueven simultáneamente. Si ambos jugadores disparan al mismo tiempo, las balas se golpean entre sí y el juego continúa. El juego termina cuando un jugador dispara mientras el otro carga municiones.
Disparar y arma vacía se considera trampa . Si un jugador hace trampa mientras el otro realiza una acción legal, el tramposo pierde inmediatamente. Si ambos jugadores hacen trampa al mismo tiempo, el juego continúa.
Los intentos de trampa no disminuyen la munición, por lo que nunca puede ser negativa.
Desafío
Dados los movimientos realizados por los jugadores A y B, salida que jugador ganó el juego: 1
para el jugador A, -1
para el jugador B y 0
para un empate. Puede usar cualquier otro triple de valores de retorno, pero debe indicar en su respuesta cuáles usa.
El juego puede:
- terminar sin tener que procesar todos los movimientos;
- no termina con los movimientos dados, y por lo tanto se considera un empate.
La entrada se puede tomar:
- como cuerdas
- como matrices / listas de enteros
- de cualquier otra manera que no preprocese la entrada
Programa completo o funciones permitidas. Como se trata de código de golf , ¡la respuesta más corta en bytes gana!
Casos de prueba
A: "123331123"
B: "131122332"
-----^ Player B shoots player A and wins.
Output: -1
A: "111322213312"
B: "131332221133"
-------^ Player B cheats and loses.
Output: 1
A: "1333211232221"
B: "1213211322221"
----------^^ Both players cheat at the same time. The game continues.
Output: 0
A: "12333213112222212"
B: "13122213312232211"
| || ^---- Player A shoots player B and wins.
^-------^^------ Both players cheat at the same time. The game continues.
Output: 1
Respuestas:
Jalea,
333224 bytesEsto imprime 5 en lugar de -1 y 7 en lugar de 1 . Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Pyth,
48464947 bytesPruébalo aquí!
¡Gracias a @isaacg por guardar
24 bytes!Toma la entrada como una tupla de 2 con la lista de los movimientos del jugador A primero y los movimientos del jugador B segundo. La salida es la misma que en el desafío.
Explicación
Breve resumen
[cheating win, fair win]
con los valores posibles-1, 0, 1
para cada una de ellas, para indicar si un jugador ganó en este punto (-1, 1
) o si el juego continúa (0
)[0,0]
, y tomar el primer elemento distinto de cero que indica el ganadorDesglose de código
fuente
m|Fd
es el mismo que|M
.M
eso también salpica. Por cierto: el problema sobre las variables lambda en conflicto que discutimos en el chat me está costando varios bytes aquí: P,1 2
es lo mismo queS2
Python, 217 bytes
Explicación : Toma A y B como listas de enteros. Simplemente pasa por cada par de movimientos, suma o resta 1 si es necesario y regresa cuando alguien hace trampa o gana. Hace lo mismo dos veces usando otro bucle for, uno para el movimiento de A y otro para el movimiento de B. Agrega 1 si x va por debajo de 0 a -1.
fuente
Java,
226212200196194 bytes-14 bytes reordenando la lógica
-12 bytes gracias al Sr. Public que señala cómo utilizar una operación ternaria para la lógica de disparo
-4 bytes agrupando la lógica de carga en un cortocircuito si
-2 bytes porque
==1
===<2
cuando la entrada sólo puede ser1
,2
,3
Uso y versión sangrada:
Ya no es tan sencilla la implementación de las reglas del juego, sino simple. Cada ciclo, realiza estas operaciones:
r
hacia perderr
no lo es0
, devuelve el valor porque alguien hizo trampax
es una variable ficticia utilizada para hacer que el compilador me permita usar una expresión ternaria.Espera, ¿Java es MÁS CORTO que Python?
fuente
w==2&&m<1?r--:m++
int x=w==2?m<1?r--:r:m--;
luego continúe usando la x (ya que esta es solo una variable ficticia para hacer que el ternario opere) comox=v==2?n<1?r++:r:n--;