Saltar al contenido

La cenefa de Talavera

Enunciado

Del muro de una capilla poblana se salvó apenas un tramo de la cenefa de Talavera, y Crispín, el azulejero, quiere hacer el molde que la repite. Mientras más corto el molde, menos azulejos tiene que pintar a mano. Escribe una función que reciba cenefa, un texto de letras minúsculas con al menos una letra: cada letra es un azulejo. Un molde de largo k sirve si cada azulejo, de la posición k (contando desde 0) al final, es igual al que está k lugares antes; el tramo puede acabar a media copia. Regresa el k más chico que sirve, un entero entre 1 y el largo del texto. El largo siempre sirve, porque no queda ningún azulejo que revisar. Con "abcabcab": el 1 no sirve (la b no es igual a la a), el 2 tampoco (la c no es igual a la a) y el 3 sí, porque la cenefa se lee abc, abc y ab, la última copia cortada. Regresa 3.

Con "aaaa" regresa 1, y con "abcd" regresa 4.

Ejemplos

  • El ejemplo

    "abcabcab" → 3

  • Todos los azulejos iguales

    "aaaa" → 1

  • Ningún molde corto sirve

    "abcd" → 4

  • Un solo azulejo

    "a" → 1

  • La última copia queda cortada

    "aabaa" → 3

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

Empiezas con esto

Python

def molde_corto(cenefa):
    pass

JavaScript

function moldeCorto(cenefa) {
}
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(n²)

Ver todos los retos →