73 lines
1.9 KiB
Markdown
73 lines
1.9 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.
|
|
|
|
```
|
|
"WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB" -> "12WB12W3B24WB"
|
|
```
|
|
|
|
RLE allows the original data to be perfectly reconstructed from
|
|
the compressed data, which makes it a lossless data compression.
|
|
|
|
```
|
|
"AABCCCDEEEE" -> "2AB3CD4E" -> "AABCCCDEEEE"
|
|
```
|
|
|
|
If the string contains any whitespace, it should be passed through unchanged:
|
|
|
|
```
|
|
"aabc dddef" -> "2abc 3def"
|
|
```
|
|
|
|
For simplicity, you can assume that the unencoded string will only contain
|
|
the letters A through Z (either lower or uppercase) and whitespace.
|
|
|
|
## Running tests
|
|
|
|
Execute the tests with:
|
|
|
|
```bash
|
|
$ elixir bob_test.exs
|
|
```
|
|
|
|
(Replace `bob_test.exs` with the name of the test file.)
|
|
|
|
|
|
### Pending tests
|
|
|
|
In the test suites, all but the first test have been skipped.
|
|
|
|
Once you get a test passing, you can unskip the next one by
|
|
commenting out the relevant `@tag :pending` with a `#` symbol.
|
|
|
|
For example:
|
|
|
|
```elixir
|
|
# @tag :pending
|
|
test "shouting" do
|
|
assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
|
|
end
|
|
```
|
|
|
|
Or, you can enable all the tests by commenting out the
|
|
`ExUnit.configure` line in the test suite.
|
|
|
|
```elixir
|
|
# ExUnit.configure exclude: :pending, trace: true
|
|
```
|
|
|
|
For more detailed information about the Elixir track, please
|
|
see the [help page](http://exercism.io/languages/elixir).
|
|
|
|
## Source
|
|
|
|
Wikipedia [https://en.wikipedia.org/wiki/Run-length_encoding](https://en.wikipedia.org/wiki/Run-length_encoding)
|
|
|
|
## Submitting Incomplete Problems
|
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
|