Saltar al contenido

Ritmos sin choque

Enunciado

Nico está aprendiendo batería y quiere probar todos los ritmos que caben en un compás de n pulsos. En cada pulso da un golpe o deja un silencio, pero su maestra le puso una regla: nunca dos golpes seguidos, porque sus manos todavía no son tan rápidas.

Escribe una función que reciba n, un entero de 0 en adelante, y regrese una lista con todos los ritmos que cumplen la regla, sin repetidos. Cada ritmo es un texto de n caracteres: "x" es un golpe y "." es un silencio. La lista va en orden alfabético, en el que el punto va antes que la x. El compás no da la vuelta: un ritmo sí puede empezar y terminar con golpe.

Con n igual a 3 regresa ["...", "..x", ".x.", "x..", "x.x"]: "xx.", ".xx" y "xxx" se quedan fuera porque tienen dos golpes seguidos. Con n igual a 1 regresa [".", "x"]. Con n igual a 0 hay un solo ritmo, el que no tiene pulsos: regresa [""].

Ejemplos

  • El ejemplo de tres pulsos

    3 → ["...", "..x", ".x.", "x..", "x.x"]

  • Un pulso

    1 → [".", "x"]

  • Cuatro pulsos

    4 → ["....", "...x", "..x.", ".x..", ".x.x", "x...", "x..x", "x.x."]

  • Sin pulsos

    0 → [""]

Además de estas, el reto tiene pruebas ocultas que se revelan al enviar tu solución.

Empiezas con esto

Python

def ritmos(n):
    pass

JavaScript

function ritmos(n) {
}
Resolver este reto

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ⁿ)

Ver todos los retos →