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"]]
Respostas:
CJam,
987 931 925663 bytesObserve que este contém todos os caracteres ASCII do código ASCII 32 a 255 apenas. Alguns caracteres podem ser ignorados pelo SE, portanto, é melhor copiar o código do link acima
Este código acima é uma versão convertida base da seguinte solução de 925 bytes:
As novas linhas são apenas para mostrar.
Isso pode ser muito praticado , mas pelo menos consegui passar em todos os casos de teste -_-.Isso levou mais tempo do que o esperado.
ATUALIZAÇÃO 1 - jogou um pouco a parte do código. Ainda há espaço para mais. A parte da string também pode ser convertida em golfe / base, mas evitarei isso agora, pois todas as outras respostas também não o fazem.
ATUALIZAÇÃO 2 - Concluído o uso do código, agora é hora de comprimir essa sequência.
ATUALIZAÇÃO 3 - A base converteu a string para reduzir o tamanho do código para 663 bytes (pode ser reduzida para 640 bytes, mas também existem 0 a 31 caracteres de código ASCII, que são realmente difíceis de lidar e eu só residirei neles quando eu sou espancado novamente).
Experimente online aqui
fonte
Python 2, 685
Define uma função que
f
aceita duas strings. Valor de retorno é a stringSurrender
se o jogador se render; caso contrário, um conjunto que consiste de cordas (que indicam feitiços com duas mãos) e comprimento de duas tuplas de cordas (indicando feitiços separados para cada mão).Origem codificada Base64:
A fonte é do formato
exec "eu352909HE%#NTHQh".decode('zip')
que executa o seguinte código:fonte
Java,
15651388Ligue com
java M %leftString %rightString
. SaídasSurrender
se o jogador se render. Caso contrário, gera string neste formuláriobothHandSpell;oneHandSpell,oneHandSpell;...
. Observe que esta é uma solução única para um problema bastante complicado. :)Recuado:
Edit: Utilizou a sugestão de Peter para criar uma matriz String com menos código.
Qualquer sugestão para melhorar isso seria apreciada.
fonte
JavaScript (ES6),
1070941Codificado em Base64:
Você o executa
eval(atob("Zj0obCxyK..."))
no console do Firefox.Código de golfe (pode incluir caracteres não suportados pelo Stack Exchange):
Como o dicionário ortográfico consiste apenas em letras, podemos tratá-lo como uma string codificada em base64 e usar números como separadores e espaços. "Decodifiquei" a string do tipo base64 em uma string binária, que é 3/4 do tamanho da original.
Ligeiramente não destruído:
Um golfe que eu particularmente gosto é testar com arrays vazios
array - 1
.[] - 1 => "" - 1 => 0 - 1 => -1 (truthy)
["foo"] - 1 => "foo" - 1 => NaN (falsey)
fonte