Siguiendo con los ejercicios de Python vamos a ver si una cadena se puede rearmar tomando un subgrupo de caracteres de la propia cadena y replicándolos para formar la cadena.
Básicamente veremos si una cadena puede ser periódica para ver si un grupo de caracteres puede rearmar a la propia cadena.
Por ejemplo, la cadena EAEEAE
es periódica porque con el subgrupo EAE
se puede rearmar. Igualmente la cadena EEEE
es periódica porque con el subgrupo E
se puede rearmar.
Veamos cómo hacer esto con Python.
Explicación del algoritmo
Vamos a realizar todas las combinaciones de la cadena. Por ejemplo para la cadena EAEAEA sus posibles combinaciones son:
- E
- EA
- EAE
- EAEA
- EAEAE
- EAEAEA
En cada paso comprobamos si al multiplicar esa combinación nos da la cadena original y si la combinación no mide lo mismo que la cadena original.
Si ambas condiciones se cumplen entonces diremos que la cadena es periódica. Por otro lado, si acabamos de combinar y no se cumplió en ninguna combinación entonces la cadena no es periódica.
Cadena periódica con Python
Veamos el código de la función escrita en Python. El método te va a devolver un booleano indicando si la cadena es o no periódica, o sea, si se puede rearmar tomando un subgrupo de la misma:
def periodica(secuencia):
longitud_secuencia = len(secuencia)
for i in range(longitud_secuencia):
combinacion = secuencia[:i+1]
print(combinacion)
longitud_combinacion = len(combinacion)
cantidad_de_veces_que_cabe = longitud_secuencia // longitud_combinacion
# Ver si esta subcadena, al multiplicarla por las veces que cabe, es igual a la cadena completa
# Nota: también comprobamos si la subcadena no es exactamente igual a la cadena original
multiplicada = combinacion*cantidad_de_veces_que_cabe
if longitud_combinacion != longitud_secuencia and multiplicada == secuencia:
return True
return False
Comenzamos calculando la longitud de la secuencia, luego hacemos un ciclo for desde el 0 hasta la longitud de la cadena menos 1.
Calculamos la combinación en la línea 4 y la imprimimos para términos de depuración.
Luego obtenemos la longitud de la combinación y estimamos cuántas veces debemos multiplicarla para que sea de la misma longitud que la cadena original.
Multiplicamos la combinación en la línea 10 y comprobamos si la combinación multiplicada es igual a la cadena original pero además también revisamos si la longitud de la combinación no es igual a la de la cadena original.
Poniendo todo junto
A continuación dejo el ejemplo de código junto con unos ejemplos de su uso:
def periodica(secuencia):
longitud_secuencia = len(secuencia)
for i in range(longitud_secuencia):
combinacion = secuencia[:i+1]
print(combinacion)
longitud_combinacion = len(combinacion)
cantidad_de_veces_que_cabe = longitud_secuencia // longitud_combinacion
# Ver si esta subcadena, al multiplicarla por las veces que cabe, es igual a la cadena completa
# Nota: también comprobamos si la subcadena no es exactamente igual a la cadena original
multiplicada = combinacion*cantidad_de_veces_que_cabe
if longitud_combinacion != longitud_secuencia and multiplicada == secuencia:
return True
return False
print(periodica("EAEAEA"))
print(periodica("Parzibyte"))
print(periodica("HolaHola"))
La salida ya la dejé anteriormente en una imagen.
Por aquí te dejo otros ejercicios de Python si quieres seguir aprendiendo sobre este lenguaje.