Run-length encoding

You are encouraged to solve this task according to the task description, using any language you may know.


Task

Given a string containing uppercase characters (A-Z), compress repeated 'runs' of the same character by storing the length of that run, and provide a function to reverse the compression.

The output can be anything, as long as you can recreate the input with it.



Example

 Input: WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW
 Output: 12W1B12W3B24W1B14W


Note: the encoding step in the above example is the same as a step of the Look-and-say sequence.




loop:   ordcop [lch?]\loop;
ordcop: ord/copy;
ord:    char(ch)/last [ch!=lch?]\new [cnt++] fail;
new:    ( [lch?] parse(out) | () ) [lch=ch] [cnt=1] fail;
out:    decimal(cnt) scopy = { 2 1 };
last:   parse(out) [lch=0];
copy:   smark any(!<<>>);
 
ch:     0;
lch:    0;
cnt:    0;