El motivo escondido
- O(2ⁿ) · Legendaria
- Plan completo
- Python
- JavaScript
- recursión
- textos
- índices
Enunciado
A Irene, compositora, le gusta esconder su motivo favorito dentro de sus melodías: las notas del motivo aparecen en orden, pero con otras notas en medio. Ahora quiere saber de cuántas maneras distintas se puede encontrar el motivo en una melodía.
Escribe una función que reciba melodia y motivo, dos textos hechos con las letras C, D, E, F, G, A y B, una letra por nota. La melodía tiene a lo más 14 notas y puede venir vacía; el motivo trae al menos una nota. Regresa un entero: de cuántas maneras puedes escoger notas de la melodía que, leídas en el orden en que aparecen, formen el motivo. Puedes saltarte las notas que quieras, pero no cambiarlas de orden. Dos maneras son distintas si usan al menos una posición distinta de la melodía, aunque la nota sea la misma.
Con "CEGCEG" y "CG": la C de la posición 0 hace pareja con cada una de las dos G, y la C de la posición 3 solo con la G del final. Regresa 3. Con "CDEFG" y "GC", la única C va antes que la G, así que regresa 0.
Ejemplos
El motivo aparece tres veces
"CEGCEG", "CG" → 3
Las notas van en otro orden
"CDEFG", "GC" → 0
Notas repetidas
"CCC", "CC" → 3
Una sola nota
"GAGAG", "G" → 3
Además de estas, el reto tiene pruebas ocultas que se revelan al enviar tu solución.
Empiezas con esto
Python
def veces(melodia, motivo):
passJavaScript
function veces(melodia, motivo) {
}Se abre en el navegador, con el editor y las pruebas. Este reto es del plan completo; los de O(1) y O(log n) son gratis.
Más retos de O(2ⁿ)
- La balanza de dos platosrecursión · listas · operaciones
- La bodega de la cápsularecursión · listas · comparaciones
- La ficha de la abuelarecursión · listas · índices
- La fiesta de la cuadrarecursión · listas · ciclos
- La guardia completarecursión · listas · textos
- La palabra de elementosrecursión · textos · índices