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.




string$ = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"
beg = 1
i   = 1
[loop]
s$ = mid$(string$,beg,1)
while mid$(string$,i,1) = s$
  i = i + 1
wend
press$ = press$ ; i-beg;s$
beg    = i
if i < len(string$) then goto [loop]
print "Compressed:";press$
 
beg = 1
i   = 1
[expand]
while mid$(press$,i,1) <= "9"
  i = i + 1
wend
for j = 1 to val(mid$(press$,beg, i - beg))
  expand$ = expand$ + mid$(press$,i,1)
next j
i   = i + 1
beg = i
if i < len(press$) then goto [expand]
print "  Expanded:";expand$