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)
- compress: cada racha de letras iguales se escribe como letra + cuántas. Si solo hay una, sin número:
"aabcccccaaa"→"a2bc5a3". - decompress: lo contrario. El número puede tener varios dígitos (
"a12"= 12 aes) y si no hay número, es 1. - Cadena vacía → cadena vacía.
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
- Comprobar
j < len(s)antes des[j], si noIndexErroral final. - Devolver, no
print. Nada deimport. - Los números no se comprimen: la entrada solo trae letras, así
decompressno se confunde.