.
Solución al Ejercicio: Decodificar RLE
📋 Copiar código
import re
def rle_decodificar(texto_codificado):
"""
Decodifica una cadena codificada con Run-Length Encoding (RLE).
Args:
texto_codificado: La cadena de texto codificada con RLE.
Returns:
La cadena de texto original decodificada.
"""
resultado = ""
patron = re.compile(r'(\D)(\d*)') # Coincide con un no-dígito seguido de cero o más dígitos
for match in patron.finditer(texto_codificado):
caracter = match.group(1)
repeticiones_str = match.group(2)
repeticiones = int(repeticiones_str) if repeticiones_str else 1
resultado += caracter * repeticiones
return resultado
# Ejemplos de uso
texto_codificado1 = "A4B3C2DA2"
resultado1 = rle_decodificar(texto_codificado1)
print(f"'{texto_codificado1}' decodificado con RLE: '{resultado1}'")
texto_codificado2 = "W12B3W12B1"
resultado2 = rle_decodificar(texto_codificado2)
print(f"'{texto_codificado2}' decodificado con RLE: '{resultado2}'")
texto_codificado3 = "ABCDE"
resultado3 = rle_decodificar(texto_codificado3)
print(f"'{texto_codificado3}' decodificado con RLE: '{resultado3}'")
texto_codificado4 = ""
resultado4 = rle_decodificar(texto_codificado4)
print(f"'' decodificado con RLE: '{resultado4}'")
texto_codificado5 = "A3B3A3B3A3"
resultado5 = rle_decodificar(texto_codificado5)
print(f"'{texto_codificado5}' decodificado con RLE: '{resultado5}'")
Explicación del Código:
-
import re
:
- Importa el módulo
re
para
trabajar con expresiones regulares.
-
def
rle_decodificar(texto_codificado):
:
- Define una función llamada
rle_decodificar
que toma una cadena codificada con RLE (texto_codificado
)
como entrada.
-
resultado = ""
:
- Inicializa una cadena vacía para
almacenar el resultado decodificado.
-
patron = re.compile(r'(\D)(\d*)')
:
- Compila una expresión regular para
analizar la cadena codificada:
(\D)
: Coincide y
captura cualquier carácter que no sea un dígito. Este es el carácter
repetido.
(\d*)
: Coincide y
captura cero o más dígitos. Este es el número de repeticiones (puede
estar ausente, en cuyo caso se asume 1).
-
for match in
patron.finditer(texto_codificado):
:
- Itera a través de todas las coincidencias
del patrón en la cadena codificada.
finditer
devuelve un
iterador de objetos de coincidencia.
-
caracter = match.group(1)
:
- Obtiene el carácter repetido del primer
grupo de captura.
-
repeticiones_str = match.group(2)
:
- Obtiene la cadena de dígitos que
representa el número de repeticiones del segundo grupo de captura.
-
repeticiones =
int(repeticiones_str) if repeticiones_str else 1
:
- Convierte la cadena de repeticiones a un
entero. Si la cadena de repeticiones está vacía (el número no estaba
presente), se asume una repetición de 1.
-
resultado += caracter *
repeticiones
:
- Añade el
caracter
al
resultado
repetido el número de veces indicado por
repeticiones
.
-
return resultado
:
- Devuelve la cadena original decodificada.
Ejemplos de Uso:
Los ejemplos muestran cómo la función decodifica
diferentes cadenas codificadas con RLE, restaurando la cadena original con las
repeticiones de caracteres.
.