🎉 ¡Felicidades! 🎉
¡Has resuelto la tarea brillantemente! Era un reto difícil, pero encontraste la solución correcta. ¡Estás un paso más cerca de dominar la programación! Sigue así, cada etapa superada te hace más fuerte.
ProgerLib Python para todos
Imagina que trabajas como productor musical en un estudio de grabación. Cada día recibes docenas de muestras musicales cortas (patrones rítmicos). Algunas de ellas — son solo un motivo muy breve, repetido varias veces, mientras que otras — son melodías más complejas y únicas. Tu tarea — es ahorrar tiempo y escribir un programa analizador que ayude a separar rápidamente las muestras simples que se repiten de las complejas.
Representarás una muestra en forma de una línea donde cada símbolo — es una nota o un sonido de percusión (por ejemplo, "Ababab" o "Takadimitakadimi"). El programa debe determinar si toda la línea es una repetición de alguna parte inicial más corta de la misma.
Por ejemplo:
" ababab " es una repetición del motivo " ab " 3 veces. Por lo tanto, es una muestra simple. Resultado: true " abcabc " es una repetición del motivo " abc " 2 veces. Resultado: true " abasde " no es una repetición de ninguna de sus partes iniciales. Resultado: false " aaaa " es una repetición " a " 4 veces. Resultado: true Debes escribir un programa que tome una línea (muestra) como entrada y devuelva true si es una repetición, y false en caso contrario.
Muestra musical (Tipo: Línea). Esta es una línea sin espacios que el usuario introduce.
El resultado de la verificación (tipo: valor breve). Es la palabra & nbsp;
gogogo
verdadero
# Получаем строку от пользователя
input_string = input()
# Получаем длину введенной строки
n = len(input_string)
# Создаем флаг, который покажет, нашли ли мы подходящий шаблон. Изначально считаем, что не нашли.
found_pattern = False
# Начинаем цикл для проверки всех возможных длин подшаблона.
# Длина подшаблона (i) может быть от 1 до половины длины всей строки.
# Длиннее половины быть не может, так как шаблон должен повториться хотя бы дважды.
for i in range(1, n // 2 + 1):
# Проверяем, делится ли длина всей строки нацело на длину предполагаемого шаблона.
# Если нет, то из такого шаблона целую строку составить нельзя.
if n % i == 0:
# Если делится, то у нас есть кандидат в шаблоны.
# Это начальная часть строки длиной i.
pattern = input_string[:i]
# Вычисляем, сколько раз наш кандидат-шаблон должен повториться, чтобы получить строку нужной длины.
num_repeats = n // i
# Создаем тестовую строку, повторяя наш кандидат-шаблон нужное количество раз.
test_string = pattern * num_repeats
# Сравниваем созданную тестовую строку с оригинальной.
if test_string == input_string:
# Если они совпали, значит, мы нашли повторяющийся шаблон.
found_pattern = True
# Прерываем цикл, так как дальнейшие проверки не нужны.
break
# После завершения цикла выводим значение флага.
# Если мы нашли шаблон, он будет True, если нет - останется False.
print(found_pattern)
🎉 ¡Felicidades! 🎉
¡Has resuelto la tarea brillantemente! Era un reto difícil, pero encontraste la solución correcta. ¡Estás un paso más cerca de dominar la programación! Sigue así, cada etapa superada te hace más fuerte.
AD
Publicidad
Ejecutando tu código...