Игра Размахивая руками находится где-то между пером и бумагой Magic: The Gathering и очень тщательно разработанными Rock Paper Scissors. Каждый ход вы записываете один из восьми жестов для каждой руки:
- пошевелила
F
ingers - протянутый
P
милостыня S
вздремнутьW
прD
igit указываяC
круг- станция
B
N
ичто
Есть несколько важных правил, которые имеют приоритет над остальными:
- Если обе руки жестом,
P
вы автоматически сдаетесь . (Это упрощение, но мы пойдем с этим.) - Только одна рука за раз может жест
B
.
Серия жестов, выполняемых одной и той же рукой, может разыграть заклинание, где каждое заклинание связано с определенной последовательностью. Эти последовательности могут перекрываться, но каждый жест может использоваться только как последний жест одного заклинания (так что вы можете создать до двух заклинаний за один ход). Некоторые заклинания требуют, чтобы жест делался обеими руками одновременно.
Ваша задача, учитывая список жестов для каждой руки, определить, какие заклинания можно разыграть в текущем ходу. Для каждой руки последняя буква в списке представляет жест, выбранный для текущего хода.
Вот список последовательностей жестов. Буквы в верхнем регистре относятся к жесту, выполненному одной рукой, буквы в нижнем регистре относятся к жесту, выполненному обеими руками.
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
Да, Lightning bolt
и Counterspell
имеют две разные последовательности каждая.
Вы можете написать программу или функцию, используя ввод в любом удобном формате списка или строки, через STDIN, аргумент командной строки или аргумент функции, если они не были предварительно обработаны. Вы можете выводить пары заклинаний через возвращаемое значение или печатая в STDOUT. Опять же, вы можете использовать любой удобный формат списка или строки, если вывод является однозначным.
Вы можете предположить, что последовательности для левой и правой руки имеют одинаковую длину, и что они действительны (в частности, B
никогда не будут выполняться двумя руками одновременно). Обратите внимание, что вход будет только содержать заглавные буквы. Буквы в нижнем регистре используются только в приведенном выше списке, чтобы указать, что обе руки должны выполнить один и тот же (верхний регистр) жест.
Для заклинаний, которые заканчиваются жестом двумя руками, вы должны просто вывести одно заклинание. Если одна рука не может выполнить заклинание, это должно быть указано строкой, содержащей только дефис,-
.
Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.
Примеры
Каждый пример состоит из трех строк: левая последовательность, правая последовательность (обе входные; самый правый жест - самая последняя) и список всех возможных комбинаций заклинаний (выходные данные).
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"]]