Implémente l'encodage et le décodage en quantité à longueur variable.
Le but de cet exercice est de mettre en œuvre l'encodage et le décodage VLQ.
En bref, le but de cet encodage est de représenter des valeurs entières d'une manière qui permet d'économiser des octets. Seuls les 7 premiers bits de chaque octet sont significatifs (justifiés à droite ; un peu comme dans un octet ASCII). Donc, si tu as une valeur de 32 bits, il faut la décomposer en une série d'octets de 7 bits. Bien sûr, tu obtiendras un nombre variable d'octets selon ton entier. Pour indiquer quel est le dernier octet de la série, tu laisses le bit n° 7 à zéro. Dans tous les octets qui précèdent, tu mets le bit n° 7 à 1.
Ainsi, si un entier est compris entre 0-127, il peut être représenté sur un seul octet.
Bien que le VLQ puisse traiter des nombres de tailles arbitraires, dans cet exercice on se limitera aux nombres qui tiennent dans un entier non signé de 32 bits.
Voici des exemples d'entiers sous forme de valeurs 32 bits, et les quantités à longueur variable auxquelles elles correspondent :
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
Il est parfois nécessaire de lever une exception. Dans ce cas, tu dois toujours inclure un message d'erreur explicite pour indiquer l'origine de l'erreur. Cela rend le code plus lisible et facilite grandement le débogage. Si tu sais que l'erreur sera d'un certain type, tu peux choisir de lever l'un des types d'erreur intégrés, mais tu dois quand même inclure un message explicite.
Cet exercice demande en particulier d'utiliser l'instruction raise pour « lever » une ValueError si la séquence à décoder ou à encoder est incomplète. Pour que les tests passent, tu dois à la fois lever l'exception avec raise et y joindre un message.
Pour lever une ValueError avec un message, écris le message comme argument du type exception :
# if the sequence is incomplete
raise ValueError("incomplete sequence")
Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 exercices, et un vrai mentorat humain, le tout gratuitement.