O jogo Waving Hands está em algum lugar entre Magic: the Gathering e uma tesoura de papel de pedra muito elaborada. A cada turno, escreva um dos oito gestos para cada mão:
- mexeu
F
Ingers P
alm oferecidoS
sestaW
aveD
igit apontandoC
colo- sta
B
N
nada
Existem poucas regras importantes que têm precedência sobre o resto:
- Se ambas as mãos gesticularem,
P
você se renderá automaticamente . (Isso é uma simplificação, mas vamos com isso.) - Apenas uma mão de cada vez pode gesticular
B
.
Uma série de gestos realizados pela mesma mão pode lançar um feitiço, onde cada feitiço está vinculado a uma sequência específica. Essas seqüências podem se sobrepor, mas cada gesto pode ser usado apenas como o gesto final de uma única mágica (para que você possa criar até duas magias em uma única vez). Alguns feitiços exigem que um gesto seja feito com as duas mãos simultaneamente.
Sua tarefa é, dada uma lista de gestos para cada mão, determinar quais feitiços podem ser lançados no turno atual. Para cada mão, a última letra da lista representa o gesto escolhido para a curva atual.
Aqui está a lista de seqüências de gestos. Letras maiúsculas referem-se a um gesto realizado por uma única mão; letras minúsculas referem-se a um gesto realizado com as duas mãos.
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
Sim, Lightning bolt
e Counterspell
tem duas sequências diferentes cada.
Você pode escrever um programa ou função, inserindo qualquer formato conveniente de lista ou string, via STDIN, argumento de linha de comando ou argumento de função, desde que não seja pré-processado. Você pode emitir pares de feitiços via valor de retorno ou imprimindo em STDOUT. Novamente, você pode usar qualquer formato conveniente de lista ou string, desde que a saída seja inequívoca.
Você pode supor que as seqüências para a mão esquerda e direita tenham o mesmo comprimento e que sejam válidas (em particular, B
nunca serão executadas por duas mãos ao mesmo tempo). Observe que a entrada conterá apenas letras maiúsculas. Letras minúsculas são usadas apenas na lista acima para indicar que as duas mãos precisam executar o mesmo gesto (maiúsculas).
Para feitiços que terminam com um gesto com as duas mãos, você deve apenas emitir um único feitiço. Se uma mão não pode executar um feitiço, isso precisa ser indicado por uma sequência contendo apenas um hífen -
,.
Isso é código de golfe, então a resposta mais curta (em bytes) vence.
Exemplos
Cada exemplo consiste em três linhas: a sequência da esquerda, a sequência da direita (ambas as entradas; o gesto mais à direita é o mais recente) e a lista de todas as combinações possíveis de ortografia (a saída).
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"]]