Кодирование длин серий (RLE)
Повторы сжимаются в «буква + счёт»: AAAABBB → A4B3.
1function rle(s: string): string {2 let out = ''3 let i = 04 5 while (i < s.length) {6 let run = 17 while (i + run < s.length && s[i + run] === s[i]) run++8 out += s[i] + String(run)9 i += run10 }11 12 return out13}14 15function unrle(code: string): string {16 let out = ''17 for (let i = 0; i < code.length; i += 2) {18 out += code[i]!.repeat(Number(code[i + 1]))19 }20 return out21}Проблема
Повторы сжимаются в «буква + счёт»: AAAABBB → A4B3.
Что вы видите
Серия подсвечивается, в выход пишется пара: символ и сколько раз он шёл подряд.
Как это работает
Простейшее сжатие: отлично на длинных повторах, раздувает пёстрые данные. Основа PCX/BMP-графики и факсов; в колоночных БД аналогичные схемы сжимают длинные последовательности одинаковых значений.
Пошаговый разбор
- 01
Серия
Подряд одинаковые символы.
- 02
Пара
Символ + длина серии.
- 03
Обратимо
Распаковка тривиальна.
Complexity и ограничения
Сложность см. в шапке страницы.
Edge cases
- Пустой вход
Корректная тривиальная обработка.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
Факсы
Group 3/4 факс-сжатие — RLE по строкам.
PNG-фильтры
Подготовка данных повторами улучшает сжатие.
ClickHouse
Run-length сжатие сортированных колонок.
Связанные алгоритмы
«Сжатие из 1970-х, которое живёт в ваших файлах»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.