En el juego Shantae original , hay danzas de transformación que debes ingresar a tiempo usando el D-Pad, A y B. Si completas una secuencia predefinida mientras bailas, te transformarás en la forma correspondiente (o teletransportarse o sanar) . Su tarea es generar el efecto correspondiente cuando se le da una entrada. El problema es que puede obtener movimientos de baile extraños en la entrada, tanto antes como después, y puede que ni siquiera haya un baile en la entrada.
Los bailes
Utilizando UDLRAB
para movimientos de baile:
- Mono:
DR
- Elefante:
DL
- Araña:
DA
- Arpía:
DB
- Tinkerbat:
DUU
- Sanar:
DUA
- Ciudad Scuttle:
DULR
- Ciudad del agua:
DURLAB
- Oasis Town:
DURRBA
- Caravana de zombis:
DULLBA
- Ciudad de bandidos:
DUBLBR
Codificación
Entrada: una secuencia de movimientos de baile. Esto puede contener los valores Arriba, Abajo, Izquierda, Derecha, B, A y Esperar. Use cualquier codificación conveniente.
Salida: un valor correspondiente a la primera danza coincidente en la secuencia o un valor distinto si no hay coincidencia. Puede codificar esto de cualquier manera conveniente.
Ejemplos
Usando .
para esperar:
DR
→ monoUUU.DLUAB
→ ElefanteL.DDBALL
→ ArpíaLRLRDURURLAB
→ No coincideDUBLBR
→ Ciudad de bandidosDURLBA
→ No coincideDDUDR
→ monoRLAB
→ No coincide.DUUBBB
→ TinkerbatDADRDL
→ araña.DURRBADR
→ Oasis TownDURR.BA
→ No coincide
Otras reglas / notas
- Se aplican reglas estándar sobre lagunas y métodos de IO
- Describa su codificación para movimientos de baile y bailes coincidentes.
- Puede haber más de un baile en la entrada. Si ese es el caso, coincida solo con el primero que aparece en la entrada.
- Esperar interrumpe los bailes.
fuente
DURLAB
, que es Water TownRespuestas:
JavaScript (ES6),
92 88 6159 bytesGuardado 2 bytes gracias a una sugerencia de @tsh
Espera
UdLRAB
los movimientos de baile y la.
espera. Salidas indefinidas si no hay coincidencia, o la secuencia de la danza coincidente (por ejemplo,dR
para Monkey odURLAB
Water Town).Pruébalo en línea!
o Pruébalo con salida mejorada
fuente
R|L|A|B
->[RLAB]
?d([A-R]|U...)
aparentemente está bien, ya que cualquier codificación conveniente también puede usarse para la entrada. ¡Gracias!JavaScript (Node.js) ,
179164153148137115 bytesPruébalo en línea!
-11 bytes gracias a la respuesta de Arnauld, haciéndome dar cuenta de que la salida se puede simplificar
-8 bytes gracias a flawr en el chat que me ayuda a comprobar el vacío de la matriz de golf
-12 bytes gracias a Shaggy
Toma la entrada como una cadena en el mismo formato que los casos de prueba OP.
Emite la secuencia de baile coincidente menos la guía
D
para un partido, oundefined
para ningún partido.El entero corresponde al índice de la coincidencia en esta matriz (indexado 0):
Probablemente espacio para jugar al golf, especialmente al comprimir el conjunto de movimientos de baile.
Explicación
Enfoque general
Itere a través de la cadena de entrada, eliminando el primer carácter cada vez y verificando si la cadena resultante comienza con una cadena de baile válida.
Todo es solo un bucle for dentro de un bucle for, lo dividiré en 3 partes:
- Condición
- Bucle interno
- Poste externo
Condición
Esta es la condición de terminación para el bucle externo, IE, mientras que esto es cierto, siga bucleando.
Bastante sencillo:
d
es una cadena, en JS las cadenas vacías son falsey "d
no está vacío".Bucle interior
Esto es lo que sucede en cada ciclo:
Entonces, primero definimos una matriz con:
Esto crea una serie de todas las cuerdas de movimiento de baile, faltando
D
al comienzo de cada una de ellas (todas comienzan conD
). Llamaremos a este conjuntox
. Probablemente haya un potencial de golf significativo aquí.
Luego iteramos a través de cada elemento en
x
(almacenado enz
) y ejecutamos lo siguiente:Esto se usa
d.search
para devolver el índice en la cadena de'D'+z
. Si y solo sid
comienza con'D'+z
, esto regresará0
, lo cual es un valor falso en JS.Como tal,
!d.search
será solamente ser verdad cuando la cadena comienza con'D'+z
.Nota: esta es la razón por la que omitimos el
D
s inx
, ya que nos ahorra 10 bytes (1 por baile), y solo nos cuesta un solo byte en esta búsquedaLuego, si la búsqueda coincide, regresamos
z
. Este es el baile que hemos encontrado, sin el protagonistaD
.Si no, seguimos en bucle.
Poste exterior
Esto es lo que sucede al final de cada iteración del bucle externo:
Solo elimina el primer personaje de
d
Sin coincidencia
Si
d
se vacía y no se ha encontrado ninguna coincidencia, se alcanza el final de la función. Esto regresa implícitamenteundefined
según el comportamiento estándar de JavaScriptfuente
substr -> slice
cambio, y sigo olvidando qued
es una cadena, no una matriz. Las cadenas vacías son falsey: P Y bueno, me olvidé de todo lo de la declaración de 1 hijod.search
que devolverá 0 si la cadena de búsqueda está al comienzo ded
, lo que por supuesto es un valorindexOf
pero es compatible con RegEx, lo cual es irrelevante aquí.retina ,
53434237 bytesPruébalo en línea!
Se desvía ligeramente de la entrada y salida estándar para utilizar
;:
comoDU
respectivamente. Inspiración de tsh , ahorrando 5 bytes.Coincide con el primer baile y lo emite, después de ver la respuesta de Arnauld . Ahorró 10 bytes gracias a Neil que sugirió usar la etapa de lista
L
y limitar la salida a la primera coincidencia. Guardado de un byte gracias a TSH acortar la expresión regular.El encabezado y el pie de página solo permiten múltiples entradas y hacen que la salida sea legible, respectivamente.
fuente
1!
lugar de0L
, pero en ese caso el pie de página no funcionará (1M!
funcionará incluso con el pie de página).L
.R|L|A|B
->[RLAB]
?D[RLAB]|DU(...)
lugar?Perl 5
-p
, 47 bytesPruébalo en línea!
Devuelve el código del baile (permitido según el comentario de @ Arnauld) o en blanco si no coincide.
fuente
Carbón , 48 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Divida la cadena comprimida
RDLDADBDUUDUADULRDURLABDURRBADULLBADUBLBR
(que contiene todos los bailes, excepto el inicioD
)D
y luego prefija la parteD
posterior de cada entrada.Para cada baile, concatene a la entrada y encuentre la primera posición del baile en la concatenación, además de tomar la duración del baile. Para los bailes que no se encontraron, esto significa que el resultado será la longitud de la cadena de entrada en lugar de
-1
.Tome el mínimo de esos resultados, es decir, la posición y la duración del baile que apareció primero.
Extrae ese baile de la cuerda original.
fuente
Jalea ,
3328 bytesPruébalo en línea!
Toma como entrada una lista de enteros que representan los movimientos:
Devuelve un entero envuelto para la respuesta, o una lista de todos estos enteros para ninguna coincidencia:
El enlace TIO incluye código en el pie de página para traducirlos nuevamente a las cadenas en la pregunta, pero no es necesario para que el programa funcione usando los enteros especificados aquí.
fuente
05AB1E , 104 bytes
Pruébalo en línea!
Escribí esta monstruosidad sin darme cuenta de que podía usar números para mover nombres ...
fuente
sfk ,
11991 bytesPruébalo en línea!
Da el primer regalo de baile como una secuencia de movimientos.
(
xex
es solo un editor de flujo, y en este caso_<pattern>_
es texto de búsqueda)fuente
05AB1E ,
2827 bytesGuardado 1 byte gracias a Grimy
Pruébalo en línea!
Emite la coincidencia (es decir,
10
para Monkey) o-1
no coincideExplicación
fuente
¦
, pero no pensé en reordenar después de cambiar el significado de los números :)