summaryrefslogtreecommitdiff
path: root/go/variable-length-quantity/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'go/variable-length-quantity/README.md')
-rw-r--r--go/variable-length-quantity/README.md56
1 files changed, 56 insertions, 0 deletions
diff --git a/go/variable-length-quantity/README.md b/go/variable-length-quantity/README.md
new file mode 100644
index 0000000..102efbd
--- /dev/null
+++ b/go/variable-length-quantity/README.md
@@ -0,0 +1,56 @@
+# 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 `go test` from within the exercise directory.
+
+If the test suite contains benchmarks, you can run these with the `--bench` and `--benchmem`
+flags:
+
+ go test -v --bench . --benchmem
+
+Keep in mind that each reviewer will run benchmarks on a different machine, with
+different specs, so the results from these benchmark tests may vary.
+
+## Further information
+
+For more detailed information about the Go track, including how to get help if
+you're having trouble, please visit the exercism.io [Go language page](http://exercism.io/languages/go/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.