No jogo Shantae original , há danças de transformação que você precisa inserir no tempo usando o D-Pad, A e B. Se você completar uma sequência predefinida enquanto dança, você se transformará na forma correspondente (ou se teleportará ou curará) . Sua tarefa é gerar o efeito correspondente quando receber uma entrada. O problema é que você pode ter movimentos de dança estranhos na entrada, antes e depois, e pode até não haver uma dança na entrada.
As Danças
Usando UDLRAB
para movimentos de dança:
- Macaco:
DR
- Elefante:
DL
- Aranha:
DA
- Harpia:
DB
- Tinkerbat:
DUU
- Curar:
DUA
- Cidade de Scuttle:
DULR
- Cidade da Água:
DURLAB
- Cidade Oásis:
DURRBA
- Caravana zumbi:
DULLBA
- Cidade dos bandidos:
DUBLBR
Codificação
Entrada: uma sequência de movimentos de dança. Pode conter os valores Para cima, Para baixo, Esquerda, Direita, B, A e Aguardar. Use qualquer codificação conveniente.
Saída: um valor correspondente à primeira dança correspondente na sequência ou um valor distinto, se não houver correspondência. Você pode codificar isso de qualquer maneira conveniente.
Exemplos
Usando .
para esperar:
DR
→ MacacoUUU.DLUAB
→ ElefanteL.DDBALL
→ HarpiaLRLRDURURLAB
→ Nenhuma correspondênciaDUBLBR
→ Cidade dos BandidosDURLBA
→ Nenhuma correspondênciaDDUDR
→ MacacoRLAB
→ Nenhuma correspondência.DUUBBB
→ TinkerbatDADRDL
→ Aranha.DURRBADR
→ Cidade OásisDURR.BA
→ Nenhuma correspondência
Outras regras / notas
- Aplicam-se regras padrão sobre brechas e métodos de IO
- Descreva sua codificação para movimentos de dança e danças correspondentes.
- Pode haver mais de uma dança na entrada. Se for esse o caso, combine apenas o primeiro que aparece na entrada.
- A espera interrompe as danças.
fonte
DURLAB
, que é Water TownRespostas:
JavaScript (ES6),
92 88 6159 bytesEconomizou 2 bytes graças a uma sugestão de @tsh
Espera
UdLRAB
os movimentos de dança e.
a espera. Saídas indefinidas se não houver correspondência ou a sequência da dança correspondente (por exemplo,dR
para Monkey oudURLAB
Water Town).Experimente online!
ou Experimente com saída aprimorada
fonte
R|L|A|B
->[RLAB]
?d([A-R]|U...)
é aparentemente bom, já que qualquer codificação conveniente também pode ser usada para a entrada. Obrigado!JavaScript (Node.js) ,
179164153148137 137115 bytesExperimente online!
-11 bytes, graças à resposta de Arnauld, fazendo-me perceber que a saída pode ser simplificada
-8 bytes, graças à falha no bate-papo, ajudando-me a verificar campos vazios de campos de golfe
-12 bytes, graças a Shaggy
Recebe a entrada como uma sequência na mesma formatação dos casos de teste OP.
Produz a sequência de dança correspondente menos a liderança
D
de uma partida ouundefined
de nenhuma partida.O número inteiro corresponde ao índice da correspondência nesta matriz (indexada 0):
Provavelmente espaço para jogar golfe, especialmente para comprimir o conjunto de movimentos de dança.
Explicação
Abordagem geral
Itere a sequência de entrada, removendo o primeiro caractere de cada vez e verificando se a sequência resultante começa com uma sequência de dança válida.
A coisa toda é apenas um loop for dentro de um loop for, eu vou dividi-lo em 3 partes:
- Condição
- Loop interno
- Post externo
Doença
Esta é a condição de terminação para o loop externo, ou seja, enquanto isso for verdadeiro, continue em loop.
Bem simples:
d
é uma string, no JS, as strings vazias são falsey "d
não estão vazias".Laço interno
É isso que acontece a cada loop:
Então, primeiro definimos uma matriz com:
Isso cria uma matriz de todas as cordas de dança, perdendo
D
o início de cada uma delas (todas começam comD
). Vamos chamar essa matrizx
. Provavelmente há um potencial significativo de golfe aqui.
Em seguida, iteramos por cada item em
x
(armazenado emz
) e executamos o seguinte:Isso usa
d.search
para retornar o índice na sequência de'D'+z
. Se e somente sed
começar com'D'+z
, isso retornará0
, que é um valor falsey em JS.Como tal,
!d.search
será única ser verdade quando a corda começa com'D'+z
.Nota: É por isso que omitimos o
D
s inx
, pois ele economiza 10 bytes (1 por dança) e custa apenas um byte nesta pesquisaEntão, se a pesquisa corresponder, retornamos
z
. Esta é a dança que encontramos, sem a liderançaD
.Caso contrário, continuamos em loop.
Postagem externa
É isso que acontece no final de cada iteração do loop externo:
Basta remover o primeiro caractere de
d
Sem correspondência
Se
d
ficar vazio e nenhuma correspondência for encontrada, o final da função será atingido. Isso retorna implicitamenteundefined
conforme o comportamento padrão do JavaScriptfonte
substr -> slice
alteração sozinho e continuo esquecendo qued
é uma string, não uma matriz. Strings vazias são Falsey: P E boa captura nas braçadeiras, eu esqueci sobre o todo 1 criança declaração coisad.search
irá retornar 0 se a string de pesquisa é no início dod
, que é, naturalmente, um valor FalseyindexOf
mas suporta RegEx, o que é irrelevante aqui.Retina ,
534342.37 bytesExperimente online!
Desvia ligeiramente da entrada e saída padrão para usar
;:
comoDU
respectivamente. Inspiração de tsh , economizando 5 bytes.Combina a primeira dança e a produz, depois de ver a resposta de Arnauld . Economizou 10 bytes graças a Neil, sugerindo o uso do estágio de lista
L
e limitando a saída à primeira correspondência. Economizou um byte graças ao tsh diminuindo o regex.O cabeçalho e rodapé apenas permitem várias entradas e tornam a saída legível, respectivamente.
fonte
1!
vez de0L
, mas nesse caso o rodapé não funcionará (1M!
funcionará mesmo com o rodapé).L
.R|L|A|B
->[RLAB]
?D[RLAB]|DU(...)
?Perl 5
-p
, 47 bytesExperimente online!
Retorna o código da dança (permitido conforme o comentário de @ Arnauld) ou em branco se não houver correspondência.
fonte
Carvão , 48 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Divida a sequência compactada
RDLDADBDUUDUADULRDURLABDURRBADULLBADUBLBR
(que contém todas as danças, exceto a principalD
)D
e, em seguida, prefixe aD
volta para cada entrada.Para cada dança, concatene-a com a entrada e encontre a primeira posição da dança na concatenação, além de medir a duração da dança. Para danças que não foram encontradas, isso significa que o resultado será o comprimento da sequência de entrada em vez de
-1
.Pegue o mínimo desses resultados, ou seja, a posição e a duração da dança que apareceu primeiro.
Extraia essa dança da corda original.
fonte
Geléia ,
3328 bytesExperimente online!
Toma como entrada uma lista de números inteiros representando os movimentos:
Retorna um número inteiro quebrado para a resposta ou uma lista de todos esses números inteiros sem correspondência:
O link TIO inclui código no rodapé para convertê-los novamente nas seqüências de caracteres da pergunta, mas não é necessário para o programa funcionar usando os números inteiros especificados aqui.
fonte
05AB1E , 104 bytes
Experimente online!
Eu escrevi essa monstruosidade sem perceber que eu poderia usar números para mover nomes ...
fonte
sfk ,
11991 bytesExperimente online!
Dá a primeira dança presente como uma sequência de movimentos.
(
xex
é apenas um editor de stream e, neste caso,_<pattern>_
é um texto de pesquisa)fonte
05AB1E ,
2827 bytesGuardado 1 byte graças a Grimy
Experimente online!
Produz a correspondência (
10
por exemplo, para Monkey) ou-1
sem correspondênciaExplicação
fonte
¦
, mas eu não acho de reordenação depois que eu mudei o significado dos números :)