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.
Vamos a realizar todas las combinaciones de la cadena. Por ejemplo para la cadena EAEAEA sus posibles combinaciones son:
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.
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.
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.
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…
Esta web usa cookies.