Tracks
/
Python
Python
/
Ejercicios
/
Cantidad de longitud variable
Cantidad de longitud variable

Cantidad de longitud variable

Intermedia

Instrucciones

Implementa la codificación y decodificación de cantidad de longitud variable.

El objetivo de este ejercicio es implementar la codificación y decodificación VLQ.

En resumen, el objetivo de esta codificación es codificar valores enteros de una forma que ahorre bytes. Solo los primeros 7 bits de cada byte son significativos (justificados a la derecha; algo parecido a un byte ASCII). Entonces, si tienes un valor de 32 bits, debes desempaquetarlo en una serie de bytes de 7 bits. Por supuesto, tendrás una cantidad variable de bytes según cuál sea tu entero. Para indicar cuál es el último byte de la serie, dejas el bit #7 en cero. En todos los bytes anteriores, pones el bit #7 en uno.

Entonces, si un entero está entre 0-127, se puede representar con un solo byte. Aunque VLQ puede manejar números de tamaños arbitrarios, para este ejercicio nos limitaremos únicamente a números que quepan en un entero sin signo de 32 bits. Aquí tienes ejemplos de enteros como valores de 32 bits, y las cantidades de longitud variable a las que se traducen:

 NUMBER        VARIABLE QUANTITY
00000000              00
00000040              40
0000007F              7F
00000080             81 00
00002000             C0 00
00003FFF             FF 7F
00004000           81 80 00
00100000           C0 80 00
001FFFFF           FF FF 7F
00200000          81 80 80 00
08000000          C0 80 80 00
0FFFFFFF          FF FF FF 7F

Mensajes de excepción

A veces es necesario lanzar una excepción. Cuando lo hagas, siempre debes incluir un mensaje de error significativo que indique cuál es el origen del error. Esto hace que tu código sea más legible y ayuda mucho con la depuración. En situaciones donde sabes que el origen del error será de cierto tipo, puedes optar por lanzar uno de los tipos de error integrados, pero aun así debes incluir un mensaje significativo.

Este ejercicio en particular requiere que uses la sentencia raise para «lanzar» un ValueError si la secuencia a decodificar o codificar está incompleta. Las pruebas solo pasarán si haces raise de la exception e incluyes un mensaje con ella.

Para lanzar un ValueError con un mensaje, escribe el mensaje como argumento del tipo exception:

# if the sequence is incomplete
raise ValueError("incomplete sequence")
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Python Exercism

¿Todo listo para empezar Cantidad de longitud variable?

Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.