Le jeu Waving Hands se situe quelque part entre un stylo et du papier Magic: the Gathering et un Rock Paper Scissors très élaboré. Chaque tour, vous écrivez l'un des huit gestes pour chaque main:
- tortilla
F
Ingers P
alm offertS
siesteW
aveD
igit pointantC
tour- sta
B
N
rien
Il existe peu de règles importantes qui prévalent sur les autres:
- Si les deux mains
P
vous font signe de vous rendre automatiquement . (Il s'agit d'une simplification, mais nous allons continuer avec cela.) - Une seule main à la fois peut faire un geste
B
.
Une série de gestes exécutés par la même main peut lancer un sort, où chaque sort est lié à une séquence particulière. Ces séquences peuvent se chevaucher, mais chaque geste ne peut être utilisé que comme le geste final d'un seul sort (vous pouvez donc créer jusqu'à deux sorts en un seul tour). Certains sorts nécessitent qu'un geste soit fait avec les deux mains simultanément.
Votre tâche consiste, à partir d'une liste de gestes pour chaque main, à déterminer quels sorts pourraient être lancés au cours du tour en cours. Pour chaque main, la dernière lettre de la liste représente le geste choisi pour le tour en cours.
Voici la liste des séquences de gestes. Les lettres majuscules se réfèrent à un geste effectué avec une seule main, les lettres minuscules se réfèrent à un geste effectué avec les deux mains.
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
Oui, Lightning bolt
et Counterspell
ont chacun deux séquences différentes.
Vous pouvez écrire un programme ou une fonction, en prenant des entrées dans n'importe quel format de liste ou de chaîne, via STDIN, un argument de ligne de commande ou un argument de fonction, tant qu'il n'est pas prétraité. Vous pouvez sortir des paires de sorts via la valeur de retour ou en imprimant sur STDOUT. Encore une fois, vous pouvez utiliser n'importe quel format de liste ou de chaîne, tant que la sortie est sans ambiguïté.
Vous pouvez supposer que les séquences pour la main gauche et la main droite ont la même longueur et qu'elles sont valides (en particulier, B
elles ne seront jamais exécutées à deux mains en même temps). Notez que l'entrée ne contiendra que des lettres majuscules. Les lettres minuscules sont uniquement utilisées dans la liste ci-dessus pour indiquer que les deux mains doivent effectuer le même geste (majuscule).
Pour les sorts qui se terminent par un geste à deux mains, vous devez simplement sortir un seul sort. Si d' une part ne peut pas effectuer un sort, cela doit être indiqué par une chaîne contenant seulement un trait d' union, -
.
Il s'agit du code golf, donc la réponse la plus courte (en octets) l'emporte.
Exemples
Chaque exemple se compose de trois lignes: la séquence de gauche, la séquence de droite (les deux entrées; le geste le plus à droite est le plus récent) et la liste de toutes les combinaisons de sorts possibles (la sortie).
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"]]