61 lines
1.6 KiB
Markdown
61 lines
1.6 KiB
Markdown
# Run Length Encoding
|
|
|
|
Implement run-length encoding and decoding.
|
|
|
|
Run-length encoding (RLE) is a simple form of data compression, where runs
|
|
(consecutive data elements) are replaced by just one data value and count.
|
|
|
|
For example we can represent the original 53 characters with only 13.
|
|
|
|
```text
|
|
"WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB" -> "12WB12W3B24WB"
|
|
```
|
|
|
|
RLE allows the original data to be perfectly reconstructed from
|
|
the compressed data, which makes it a lossless data compression.
|
|
|
|
```text
|
|
"AABCCCDEEEE" -> "2AB3CD4E" -> "AABCCCDEEEE"
|
|
```
|
|
|
|
For simplicity, you can assume that the unencoded string will only contain
|
|
the letters A through Z (either lower or upper case) and whitespace. This way
|
|
data to be encoded will never contain any numbers and numbers inside data to
|
|
be decoded always represent the count for the following character.
|
|
|
|
## Setup
|
|
|
|
Go through the setup instructions for Javascript to
|
|
install the necessary dependencies:
|
|
|
|
[https://exercism.io/tracks/javascript/installation](https://exercism.io/tracks/javascript/installation)
|
|
|
|
## Requirements
|
|
|
|
Install assignment dependencies:
|
|
|
|
```bash
|
|
$ npm install
|
|
```
|
|
|
|
## Making the test suite pass
|
|
|
|
Execute the tests with:
|
|
|
|
```bash
|
|
$ npm test
|
|
```
|
|
|
|
In the test suites all tests but the first have been skipped.
|
|
|
|
Once you get a test passing, you can enable the next one by
|
|
changing `xtest` to `test`.
|
|
|
|
|
|
## Source
|
|
|
|
Wikipedia [https://en.wikipedia.org/wiki/Run-length_encoding](https://en.wikipedia.org/wiki/Run-length_encoding)
|
|
|
|
## Submitting Incomplete Solutions
|
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|