py_compress_decompress

Código comentado línea a línea y paso a paso:

Entregas: py_compress_decompress.py con dos funciones, compress y decompress. Rank 05 · nivel 1.

Qué pide (en palabras normales)

Subject (enunciado original)
Write two functions: `compress` and `decompress`.

`compress(s: str) -> str`:
- Takes a string and compresses consecutive repeated characters by appending the count after the character.
- If a character appears only once consecutively, omit the number '1'.
- If the input string is empty, return an empty string.

`decompress(s: str) -> str`:
- Takes a compressed string and expands it back to its uncompressed form.
- Handles multi-digit counts (e.g., "a12" -> 12 'a's).
- If no count follows a character, it counts as 1.

Expected file: py_compress_decompress.py
Function signature:
def compress(s: str) -> str:

Examples:
compress("aabcccccaaa")
=> "a2bc5a3"
decompress("a2bc5a3")
=> "aabcccccaaa"
compress("")
=> ""

3 piezas

1. Rachas con dos índices

j = i
while j < len(s) and s[j] == s[i]:
    j += 1
run = j - i

i se queda al principio de la racha, j corre hasta que cambia la letra. La racha mide j - i. Después i = j: la siguiente racha empieza donde acabó esta.

2. Omitir el 1

out += s[i] if run == 1 else s[i] + str(run)

Un if de una línea. El número va como texto: str(run), no run (no se puede sumar str + int).

3. Leer un número de varios dígitos

digits = ""
while i < len(s) and s[i].isdigit():
    digits += s[i]
    i += 1
out += ch * (int(digits) if digits else 1)

Acumulo los dígitos en un string y lo convierto al final. "abc" * 3 en Python repite la cadena: ch * n son n copias de la letra.

Trampas