Run-length encoding
Description:
Run-length encoding (RLE) is a very simple form of data compression in which runs of data (that is, sequences in which the same data value occurs in many consecutive data elements) are stored as a single data value and count, rather than as the original run. Wikipedia
Task
Your task is to write such a run-length encoding. For a given string, return a list (or array) of pairs (or arrays) [ (i1, s1), (i2, s2), …, (in, sn) ], such that one can reconstruct the original string by replicating the character sx ix times and concatening all those strings. Your run-length encoding should be minimal, ie. for all i the values si and si+1 should differ.
Examples
As the article states, RLE is a very simple form of data compression. It's only suitable for runs of data, as one can see in the following example:
runLengthEncoding "hello world!"
`shouldBe` [(1,'h'), (1,'e'), (2,'l'), (1,'o'), (1,' '), (1,'w'),(1,'o'), (1,'r'), (1,'l'), (1,'d'), (1,'!')]
It's very effective if the same data value occurs in many consecutive data elements:
runLengthEncoding "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbb"
`shouldBe` [(34,'a'), (3,'b')]
Similar Kata:
Stats:
Created | Nov 20, 2014 |
Published | Nov 20, 2014 |
Warriors Trained | 12950 |
Total Skips | 314 |
Total Code Submissions | 22136 |
Total Times Completed | 9845 |
Haskell Completions | 298 |
JavaScript Completions | 7789 |
CoffeeScript Completions | 36 |
Python Completions | 1580 |
Ruby Completions | 139 |
C Completions | 46 |
COBOL Completions | 7 |
Rust Completions | 59 |
Julia Completions | 9 |
Elixir Completions | 26 |
Total Stars | 115 |
% of votes with a positive feedback rating | 94% of 646 |
Total "Very Satisfied" Votes | 584 |
Total "Somewhat Satisfied" Votes | 50 |
Total "Not Satisfied" Votes | 12 |