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"]]