Сжатие: ищем повторяющиеся буквы, заменяем их на N и повторяющееся буква, где N - количество повторений буквы.
Декодирование: делаем поиск числа или комбинации чисел до первой найденной буквы. Выполняем замену этих чисел на N-е количество букв, где N - количество повторений найденной буквы.
Исходный код написан на языке C#