Кодировать / сжать последовательность повторяющихся целых чисел

У меня есть очень длинные целочисленные последовательности, которые выглядят так (произвольная длина!):

0000000001110002220033333

Теперь мне нужен алгоритм для преобразования этой строки во что-то сжатое

a9b3a3c3a2d5

Что означает «a 9 раз, затем b 3 раза, затем a 3 раза» и так далее, где «a» означает 0, «b» означает 1, «c» означает 2 и «d» означает 3.

Как бы Вы это сделали? Пока что мне не пришло ничего подходящего, и мне не повезло с Google, потому что я не знал, что искать. Как называется этот вид кодирования / сжатия?

PS: я собираюсь сделать кодирование сPHPи декодирование вJavaScript.

редактировать: Спасибо вам всем!

Я закончил с этой функцией для кодирования:

protected function numStringToRle($s){          
        $rle    = '';
        $count = 1;
        $len    = strlen($s);
        for($i = 0; $i < $len; $i++){
            if($i != $len && isset($s[$i+1]) && $s[$i] == $s[$i+1]){
                $count++;                
            } else {
                $rle .= chr($s[$i] + 97).( $count == 1 ? '' : $count);                                
                $count = 1;
            }
        }
        return $rle;            
}

И что за расшифровка:

var decodeCoords = function(str) {

   str = str.replace(/(.)(\d+)/g, function(_, x, n) {
       return new Array(parseInt(n, 10) + 1).join(x);
   });

   return str.
     replace(/a/g, '0').
     replace(/b/g, '1').
     replace(/c/g, '2').
     replace(/d/g, '3');     
};

Ответы на вопрос(6)

Ваш ответ на вопрос