Files
python/exercises/variable-length-quantity/example.py
Ackerley Tng 7aa57f5cee Add parameters to exercise placeholder
Add parameters to exercise placeholder for variable-length-quantity.

Also changed variable naming from bytes to bytes_ to avoid shadowing
python's bytes

Fixes: #651
2017-10-10 06:41:27 +08:00

35 lines
639 B
Python

EIGHTBITMASK = 0x80
SEVENBITSMASK = 0x7f
def encode_single(n):
bytes_ = [n & SEVENBITSMASK]
n >>= 7
while n > 0:
bytes_.append(n & SEVENBITSMASK | EIGHTBITMASK)
n >>= 7
return bytes_[::-1]
def encode(numbers):
return sum((encode_single(n) for n in numbers), [])
def decode(bytes_):
values = []
n = 0
for i, byte in enumerate(bytes_):
n <<= 7
n += (byte & SEVENBITSMASK)
if byte & EIGHTBITMASK == 0:
values.append(n)
n = 0
elif i == len(bytes_) - 1:
raise ValueError('incomplete byte sequence')
return values