Гра « Розмахуючи руками» знаходиться десь між магією з паперу та паперу: The Gathering та дуже досконалими ножицями Rock Paper. Кожен хід ви записуєте один з восьми жестів для кожної руки:
- поворушив
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"]]