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.




with javascript_semantics
function encode(string s)
    sequence r = {}
    if length(s) then
        integer ch = s[1],
                count = 1
        for i=2 to length(s) do
            if s[i]!=ch then
                r &= {count,ch}
                ch = s[i]
                count = 1
            else
                count += 1
            end if
        end for
        r &= {count,ch}
    end if
    return r
end function
 
function decode(sequence s)
    string r = ""
    for i=1 to length(s) by 2 do
        r &= repeat(s[i+1],s[i])
    end for
    return r
end function
 
sequence s = encode("WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW")
?s
?decode(s)
