Sha256: bb7cfe0a0bfcb76f056561762bd753863fc2fc72bdc5b4c86febb54f65eb623e

Contents?: true

Size: 1.93 KB

Versions: 63

Compression:

Stored size: 1.93 KB

Contents

# Variable Length Quantity

Implement variable length quantity encoding and decoding.

The goal of this exercise is to implement [VLQ](https://en.wikipedia.org/wiki/Variable-length_quantity) encoding/decoding.

In short, the goal of this encoding is to encode integer values in a way that would save bytes.
Only the first 7 bits of each byte is significant (right-justified; sort of like an ASCII byte).
So, if you have a 32-bit value, you have to unpack it into a series of 7-bit bytes.
Of course, you will have a variable number of bytes depending upon your integer.
To indicate which is the last byte of the series, you leave bit #7 clear.
In all of the preceding bytes, you set bit #7.

So, if an integer is between `0-127`, it can be represented as one byte.
Although VLQ can deal with numbers of arbitrary sizes, for this exercise we will restrict ourselves to only numbers that fit in a 32-bit unsigned integer.
Here are examples of integers as 32-bit values, and the variable length quantities that they translate to:

```text
 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
```

## Running the tests

To run the tests, run the command `busted` from within the exercise directory.

## Further information

For more detailed information about the Lua track, including how to get help if
you're having trouble, please visit the exercism.io [Lua language page](http://exercism.io/languages/lua/about).

## Source

A poor Splice developer having to implement MIDI encoding/decoding. [https://splice.com](https://splice.com)

## Submitting Incomplete Solutions
It's possible to submit an incomplete solution so you can see how others have completed the exercise.

Version data entries

63 entries across 63 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.179 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.178 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.177 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.176 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.175 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.174 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.173 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.172 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.171 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.170 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.169 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.167 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.166 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.165 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.164 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.163 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.162 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.161 tracks/lua/exercises/variable-length-quantity/README.md
trackler-2.2.1.160 tracks/lua/exercises/variable-length-quantity/README.md