Условие:
- Есть множество (массив, где порядок не важен) целых чисел в диапазоне от 1 до 300.
- Количество чисел - до 1000.
Требуется написать функцию сериализации / десериализации и набор тестов демонстрирующих работу.
Требования к реализации:
- сериализованная строка должна быть
- компактной
- содержать только ASCII символы
- должна быть в среднем на 50% короче отностильено простой сериализации
Требования к содержанию и представлению тестов:
- исходная строка, сжатая строка, коэффициент сжатия.
- примеры тестов:
- простейшие короткие
- случайные - 50 чисел, 100 чисел, 500 чисел, 1000 чисел
- граничные - все числа 1 знака, все числа из 2х знаков, все числа из 3х знаков, каждого числа по 3 - всего чисел 900
Решение:
- числа будут кодироваться в символы из набора символов:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
- каждое число переводится в двоичную систему счисления и делится на группы по 6 бит. Каждой группе соотвествует символ из набора символов
- формат сериализованных чисел, где count - это счетчик кодированный 2-мя символами
[count][char]
[count][<char><char>]
[count][<char>(<char><char>)]
: где количество повторений первого . Скобки использованы для наглядности[count][(<char><char>)(<char><char>)]
: как предыдущий пункт, но число представляется 2-мя символами
- сериализованная строка:
[count][char][count][<char><char>][count][<char>(<char><char>)][count][(<char><char>)(<char><char>)]
Подготовка yarn
# включить corepack
corepack enable
Установить зависимостей
yarn install
yarn dev