3 usuarios conectados

Decodificar RLE. Ejercicio en Python

Comparte esto

 
Escribe una función en Python llamada rle_decodificar que tome una cadena codificada con RLE como entrada y devuelva la cadena original decodificada. Se asume que la cadena codificada sigue el formato: carácter seguido opcionalmente por un número que indica la repetición. RLE es una forma simple de compresión de datos donde secuencias de caracteres consecutivos idénticos se reemplazan por el carácter y el número de veces que se repite.

.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  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:

  1. import re:

    • Importa el módulo re para trabajar con expresiones regulares.
  2. def rle_decodificar(texto_codificado)::

    • Define una función llamada rle_decodificar que toma una cadena codificada con RLE (texto_codificado) como entrada.
  3. resultado = "":

    • Inicializa una cadena vacía para almacenar el resultado decodificado.
  4. 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).
  5. 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.
  6. caracter = match.group(1):

    • Obtiene el carácter repetido del primer grupo de captura.
  7. repeticiones_str = match.group(2):

    • Obtiene la cadena de dígitos que representa el número de repeticiones del segundo grupo de captura.
  8. 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.
  9. resultado += caracter * repeticiones:

    • Añade el caracter al resultado repetido el número de veces indicado por repeticiones.
  10. 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.

.