Il gioco Waving Hands si trova a metà strada tra Magic and the Paper e un elaborato Rock Paper Scissors. Ad ogni turno scrivi uno degli otto gesti per ogni mano:
- agitò
F
Ingers P
Alm offertoS
pisolinoW
AveD
igit che puntaC
giro- STA
B
N
iente
Ci sono alcune regole importanti che hanno la precedenza sul resto:
- Se gesto entrambe le mani
P
automaticamente arrendi . (Questa è una semplificazione, ma ci andremo.) - Solo una mano alla volta può gesticolare
B
.
Una serie di gesti eseguiti dalla stessa mano può lanciare un incantesimo, in cui ogni incantesimo è legato a una sequenza particolare. Queste sequenze possono sovrapporsi, ma ogni gesto può essere usato solo come gesto finale di un singolo incantesimo (quindi puoi creare fino a due incantesimi in un singolo turno). Alcuni incantesimi richiedono che sia fatto un gesto con entrambe le mani contemporaneamente.
Il tuo compito è, dato un elenco di gesti per ogni mano, per determinare quali incantesimi potrebbero essere lanciati nel turno in corso. Per ogni mano, l'ultima lettera dell'elenco rappresenta il gesto scelto per il turno corrente.
Ecco l'elenco delle sequenze di gesti. Le lettere maiuscole si riferiscono a un gesto eseguito da una sola mano, le lettere minuscole si riferiscono a un gesto eseguito con entrambe le mani.
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
e Counterspell
hanno due sequenze diverse ciascuna.
È possibile scrivere un programma o una funzione, prendendo input in qualsiasi elenco o formato stringa, tramite STDIN, argomento della riga di comando o argomento della funzione, purché non sia pre-elaborato. Puoi generare coppie di incantesimi tramite il valore di ritorno o stampando su STDOUT. Ancora una volta, è possibile utilizzare qualsiasi elenco o formato stringa conveniente, a condizione che l'output sia inequivocabile.
Si può presumere che le sequenze per la mano sinistra e destra abbiano la stessa lunghezza e che siano valide (in particolare, B
non saranno mai eseguite da due mani contemporaneamente). Si noti che l'input conterrà solo lettere maiuscole. Le lettere minuscole vengono utilizzate solo nell'elenco precedente per indicare che entrambe le mani devono eseguire lo stesso gesto (maiuscolo).
Per gli incantesimi che terminano con un gesto a due mani dovresti semplicemente emettere un singolo incantesimo. Se da un lato non è possibile eseguire un incantesimo, questo deve essere indicato da una stringa contenente solo un trattino, -
.
Questo è il golf del codice, quindi vince la risposta più breve (in byte).
Esempi
Ogni esempio è composto da tre righe: la sequenza della mano sinistra, la sequenza della mano destra (entrambi input; il gesto più a destra è il più recente) e l'elenco di tutte le possibili combinazioni di incantesimi (l'output).
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"]]