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.




 
	/^$/ b
:start 
	/^[0-9]/ b
	s/^/1/
:loop
	h
	/^9+([^0-9])\1+/ {
		s/^(9+).*/0\1/
		y/09/10/
		G
		s/^(.+)\n[0-9]+.(.*)/\1\2/
		b loop }
	/^[0-9]*[0-8]([^0-9])\1+/ {
		s/^[0-9]*([0-8]).*/\1/
		y/012345678/123456789/
		G
		s/^(.)\n([0-9]*)[0-8].(.*)/\2\1\3/
		b loop }
	/^[0-9]+9+([^0-9])\1+/ {
		s/^[0-9]*([0-8]9+).*/\1/
		y/0123456789/1234567890/
		G
		s/^(.+)\n([0-9]*)[0-8]9+.(.*)/\2\1\3/
		b loop }
	s/^([0-9]+.)(.*)/\2\1/
	b start
 