El juego Waving Hands se encuentra entre Magic and the Gathering y una muy elaborada piedra, papel y tijera. Cada turno escribes uno de los ocho gestos para cada mano:
- meneado
F
Ingers P
alm ofrecidoS
siestaW
CraD
Igit apuntandoC
regazo- sta
B
N
algo
Hay pocas reglas importantes que tienen prioridad sobre el resto:
- Si ambas manos gesto
P
que automáticamente rendición . (Esto es una simplificación, pero iremos con eso). - Solo una mano a la vez puede gesticular
B
.
Una serie de gestos realizados por la misma mano puede lanzar un hechizo, donde cada hechizo está vinculado a una secuencia particular. Estas secuencias pueden superponerse, pero cada gesto solo puede usarse como el gesto final de un solo hechizo (por lo que puedes crear hasta dos hechizos en un solo turno). Algunos hechizos requieren que se haga un gesto con ambas manos simultáneamente.
Su tarea es, dada una lista de gestos para cada mano, determinar qué hechizos podrían lanzarse en el turno actual. Para cada mano, la última letra de la lista representa el gesto elegido para el turno actual.
Aquí está la lista de secuencias de gestos. Las letras mayúsculas se refieren a un gesto realizado con una sola mano, las letras minúsculas se refieren a un gesto realizado con ambas manos.
B Stab
cDPW Dispel magic
cSWWS Summon elemental
cw Magic mirror
DFFDD Lightning bolt
DFPW Cure heavy wounds
DFW Cure light wounds
DPP Amnesia
DSF Confusion
DSFFFc Disease
DWFFd Blindness
DWSSSP Delayed effect
DWWFWc Raise dead
DWWFWD Poison
FFF Paralysis
FPSFW Summon troll
FSSDD Fireball
P Shield
p Surrender
PDWP Remove enchantment
PPws Invisibility
PSDD Charm monster
PSDF Charm person
PSFW Summon ogre
PWPFSSSD Finger of death
PWPWWc Haste
SD Missile
SFW Summon goblin
SPF Antispell
SPFPSDW Permanency
SPPc Time stop
SSFP Resist cold
SWD Fear
SWWc Fire storm
WDDc Lightning bolt
WFP Cause light wounds
WFPSFW Summon giant
WPFD Cause heavy wounds
WPP Counterspell
WSSc Ice storm
WWFP Resist heat
WWP Protection from evil
WWS Counterspell
Sí, Lightning bolt
y Counterspell
tienen dos secuencias diferentes cada una.
Puede escribir un programa o función, tomando la entrada en cualquier lista conveniente o formato de cadena, a través de STDIN, argumento de línea de comando o argumento de función, siempre que no esté preprocesado. Puede generar pares de hechizos a través del valor de retorno o imprimiendo en STDOUT. Una vez más, puede usar cualquier lista conveniente o formato de cadena, siempre que la salida sea inequívoca.
Puede suponer que las secuencias para la mano izquierda y derecha tienen la misma longitud y que son válidas (en particular, B
nunca se realizarán con las dos manos al mismo tiempo). Tenga en cuenta que la entrada solo contendrá letras mayúsculas. Las letras minúsculas solo se usan en la lista anterior para indicar que ambas manos deben realizar el mismo gesto (mayúsculas).
Para los hechizos que terminan en un gesto de dos manos, solo debes generar un solo hechizo. Si una mano no puede realizar un hechizo, esto debe indicarse con una cadena que contenga solo un guión,-
.
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
Ejemplos
Cada ejemplo consta de tres líneas: la secuencia de la mano izquierda, la secuencia de la mano derecha (ambas entradas; el gesto más a la derecha es el más reciente) y la lista de todas las combinaciones posibles de hechizos (la salida).
WFP
WWS
[["Cause light wounds","Counterspell"],["Shield","Counterspell"]]
SD
BB
[["Missile","Stab"]]
WWP
WPP
[["Surrender"]]
DFW
CCW
[["Cure light wounds","-"]]
FFW
WWF
[["-","-"]]
DCW
CCW
[["Magic mirror"]]
WFPSFW
PPDDPP
[["Summon goblin","Shield"],["Summon ogre","Shield"],["Summon troll","Shield"],
["Summon giant","Shield"],["Summon goblin","Amnesia"],["Summon ogre","Amnesia"],
["Summon troll","Amnesia"],["Summon giant","Amnesia"]]
BSWWS
CSWWS
[["Counterspell","Counterspell"]]
CSWWS
CSWWS
[["Counterspell","Counterspell"],["Counterspell","Summon elemental"],
["Summon elemental","Counterspell"],["Summon elemental","Summon elemental"]]
PWPWWC
BBSPPC
[["Haste"],["Time stop"]]
Respuestas:
Cjam,
987 931 925663 bytesTenga en cuenta que esto contiene todos los caracteres ASCII del código ASCII 32 a 255 solamente. SE puede omitir algunos caracteres, por lo que es mejor copiar el código del enlace de arriba
Este código anterior es una versión convertida base de la siguiente solución de 925 bytes:
Las nuevas líneas son solo para mostrar.
Esto se puede jugar mucho , pero al menos lo hice para pasar todos los casos de prueba -_-.Esto tardó más de lo esperado.
ACTUALIZACIÓN 1 - Golfed la parte del código un poco Todavía posibilidades para más. La parte de la cuerda también se puede convertir en golf / base, pero me abstendré de eso ahora ya que todas las otras respuestas tampoco lo están haciendo.
ACTUALIZACIÓN 2 : terminé de jugar el código, ahora es el momento de comprimir esa cadena.
ACTUALIZACIÓN 3 : Base convirtió la cadena para reducir el tamaño del código a 663 bytes (se puede reducir a 640 bytes, pero también hay de 0 a 31 caracteres de código ASCII, que son realmente difíciles de manejar y solo residiré en ellos cuando me golpeen de nuevo).
Pruébalo en línea aquí
fuente
Pitón 2, 685
Define una función que
f
acepta dos cadenas. El valor de retorno es la cadenaSurrender
si el jugador se rinde; de lo contrario, un conjunto que consiste en cuerdas (que indican hechizos de dos manos) y tuplas de cuerdas de longitud 2 (que indican hechizos separados para cada mano).Fuente codificada Base64:
La fuente es de la forma
exec "eu352909HE%#NTHQh".decode('zip')
que ejecuta el siguiente código:fuente
Java,
15651388Llamada con
java M %leftString %rightString
. SalidasSurrender
si el jugador se rinde. De lo contrario, genera una cadena de esta formabothHandSpell;oneHandSpell,oneHandSpell;...
. Tenga en cuenta que esta es una solución única para un problema bastante complicado. :)Sangrado:
Editar: se usó la sugerencia de Peter para crear una matriz de cadenas con menos código.
Cualquier sugerencia para mejorar esto sería apreciada.
fuente
JavaScript (ES6),
1070941Base64 codificada:
Lo ejecutas haciendo
eval(atob("Zj0obCxyK..."))
en la consola de Firefox.Código de golf (puede incluir caracteres no admitidos por Stack Exchange):
Dado que el diccionario de ortografía consiste solo en letras, podemos tratarlo como una cadena codificada en base64 y usar números como separadores y espacios. "Decodifiqué" la cadena tipo base64 en una cadena binaria, que es 3/4 del tamaño del original.
Ungolfing levemente:
Un golf que me gusta especialmente es probar con matrices vacías
array - 1
.[] - 1 => "" - 1 => 0 - 1 => -1 (truthy)
["foo"] - 1 => "foo" - 1 => NaN (falsey)
fuente