Cree una función que tomará dos cadenas como entrada y devolverá una única salida para el resultado. La respuesta más popular gana.
Las reglas de Rock-paper-scissors-lizard-Spock son:
- Tijeras cortadas de papel
- Papel cubre roca
- Lagarto aplasta roca
- Veneno de lagarto Spock
- Spock rompe las tijeras
- Tijeras decapitan lagarto
- Lagarto come papel
- El papel refuta a Spock
- Spock vaporiza roca
- Piedra rompe tijeras
La salida para cada caso de entrada posible es:
winner('Scissors', 'Paper') -> 'Scissors cut Paper'
winner('Scissors', 'Rock') -> 'Rock breaks Scissors'
winner('Scissors', 'Spock') -> 'Spock smashes Scissors'
winner('Scissors', 'Lizard') -> 'Scissors decapitate Lizard'
winner('Scissors', 'Scissors') -> 'Scissors tie Scissors'
winner('Paper', 'Rock') -> 'Paper covers Rock'
winner('Paper', 'Spock') -> 'Paper disproves Spock'
winner('Paper', 'Lizard') -> 'Lizard eats Paper'
winner('Paper', 'Scissors') -> 'Scissors cut Paper'
winner('Paper', 'Paper') -> 'Paper ties Paper'
winner('Rock', 'Spock') -> 'Spock vaporizes Rock'
winner('Rock', 'Lizard') -> 'Rock crushes Lizard'
winner('Rock', 'Scissors') -> 'Rock breaks Scissors'
winner('Rock', 'Paper') -> 'Paper covers Rock'
winner('Rock', 'Rock') -> 'Rock ties Rock'
winner('Lizard', 'Rock') -> 'Rock crushes Lizard'
winner('Lizard', 'Spock') -> 'Lizard poisons Spock'
winner('Lizard', 'Scissors') -> 'Scissors decapitate Lizard'
winner('Lizard', 'Paper') -> 'Lizard eats Paper'
winner('Lizard', 'Lizard') -> 'Lizard ties Lizard'
winner('Spock', 'Rock') -> 'Spock vaporizes Rock'
winner('Spock', 'Lizard') -> 'Lizard poisons Spock'
winner('Spock', 'Scissors') -> 'Spock smashes Scissors'
winner('Spock', 'Paper') -> 'Paper disproves Spock'
winner('Spock', 'Spock') -> 'Spock ties Spock'
Desafío adicional sugerido por @Sean Cheshire: permitir listas personalizadas, como las de este sitio. Con la lista n-item, el ítem pierde ante el (n-1) / 2 anterior y gana sobre el (n-1) / 2 siguiente
popularity-contest
dansalmo
fuente
fuente
Respuestas:
APL
Salida exactamente como se requiere en todos los casos, incluidos los empates. No hay tabla de búsqueda, excepto las palabras reales.
Puedes probarlo en http://ngn.github.io/apl/web/
APL solo lo sabe!
fuente
SED
fuente
Aquí hay una solución general basada en una cadena de reglas de cualquier tamaño. Realiza la mayúscula correcta para el nombre propio "Spock" y también permite reglas para especificar 'empate' en lugar de 'empates' para objetos plurales.
Resultados:
fuente
rules
, puede usar una cadena multilínea en lugar de una concatenación literal. Esto le permite eliminar los paréntesis redundantes.Pitón
fuente
Pitón
fuente
Ruby, enfoque aritmético
Los actores se pueden organizar en una matriz de tal manera que cada actor
a[i]
gane contra los actoresa[i+1]
ya[i+2]
, módulo 5, por ejemplo:Luego, para un actor
A
con índicei
, podemos ver cómo hace coincidir el actorB
contra el índicej
haciendoresult = (j-i)%5
: Resultado1
y2
significa que el actor A ganó contra un actor 1 o 2 lugares frente a él, respectivamente;3
y de4
manera similar significa que perdió contra un actor detrás de él en la serie.0
significa un empate. (Tenga en cuenta que esto puede depender del idioma; en Ruby(j-i)%5 == (5+j-i)%5
también cuandoj>i
).La parte más interesante de mi código es el uso de esta propiedad para encontrar una función de clasificación de los índices de dos actores. El valor de retorno será -1, 0 o 1 como debería :
Aquí está todo:
fuente
Pitón
Usando un diccionario complicado.
fuente
return(' '.join([p,'tie' + 's'*(p[1]!='c'),q]))
obtendrá el tiempo verbal correcto.C#
Supuestos
Los oponentes están dispuestos en una matriz de n elementos donde los jugadores vencen a los jugadores (n-1) / 2 por delante de ellos y pierden ante los jugadores (n-1) / 2 detrás de ellos. (Con listas de longitud par, el jugador pierde ante los jugadores ((n-1) / 2 + 1) detrás de ellos)
Las acciones del jugador se organizan en una matriz donde las acciones dentro del rango de [(indexOfPlayer * (n-1) / 2)] a [(indexOfPlayer * (n-1) / 2)) + (n-2) / 2 - 1 ]
Información adicional
CircularBuffer<T>
es un contenedor alrededor de una matriz para crear una matriz direccionable "infinitamente". LaIndexOf
función devuelve el índice de un elemento dentro de los límites reales de la matriz.La clase
Ejemplo
fuente
Python, one-liner
fuente
.split(', ')
y no tiene que atascarse, las reglas, juntas.Solo una pequeña cosa que se me ocurrió:
Aquí, reglas es el archivo que contiene todas las reglas que se dieron.
fuente
Pitón
Inspirado en el código APL de @ Tobia.
Resultados:
fuente
C ++
Un poco de prueba
fuente
Javascript
fuente
Javascript
Veo que esto no es un concurso de golf, pero había estado jugando con este rompecabezas por un tiempo antes de encontrar este hilo, así que aquí va.
Aquí hay una versión js (estándar) en 278 caracteres:
O uno que usa características E6 (probablemente solo funciona en Firefox) en 259 caracteres:
fuente