Повторю: со спиралями вытворяйте что хотите, но сжатием любых данных это не называйте, последнее невозможно: если после расжатия обратно должна получаться любая из
комбинаций, т.е. строка/файл из
битов, то и сжатые данные должны иметь не менее
комбинаций (иначе какую-то из выходных комбинаций получить не сможете), т.е. ровно те же
битов, т.е. сжатие полностью отсутствует. Банальная математика.
Кстати, есть простая формула, которая чинит голову (если она есть, конечно) любителям поискать алгоритм сжатия, который ужмет любой файл.
Всего файлов длины ровно
бит:
Всего файлов длины меньше
бит:
То есть из файлов длины
всегда найдется как минимум один, который не ужмется.
Очень давно читал в Сети такую историю (за давностью могу ошибиться в каких-то деталях). На одном форуме уважаемый профессор пытался донести до народа эту же идею. В ответ один программист дерзко заявил, что берётся сжать любые данные с возможностью восстановления. Заключили пари на сто долларов. Условия спора были такими:
1) Программист отправляет профессору распаковщик (исполняемый файл).
2) Профессор отправляет программисту файл с произвольными исходными данными (например, случайную последовательность байтов).
3) Программист упаковывает эти данные и отправляет профессору.
4) Профессор подаёт упакованные данные на вход распаковщика и сравнивает результат со своей исходной последовательностью. Если совпало, и упакованные данные по размеру меньше исходных, выигрывает программист. Иначе — профессор.
Когда дошло до третьего пункта, программист спросил профессора, может ли он переправить сжатые данные не одним большим куском, а частями, т.е. несколькими файлами (кажется, сославшись на постоянно слетавший Интернет — дело было в доисторическую эпоху). Профессор ответил: "Нет проблем". Файлы были пересланы, их общий размер оказался заметно меньше исходного, тем не менее, последовательность восстановилась совершенно правильно. И программер получил свои $100. Как ему это удалось? См. оффтоп.
(Оффтоп)
Упаковщик просто копировал исходную информацию в выходной файл. За следующим исключением. Когда во входном файле встречался байт с нулевым (для примера) значением, упаковщик этот байт выбрасывал, закрывал текущий выходной файл и открывал для записи новый, как следующую часть.
Программа-распаковщик, сшивая вместе две соседние части, вставляла в место сшивки нулевой байт.
Ясно, что необязательно поступать так со всеми нулями (части получатся подозрительно короткими и очень разных размеров), а лишь с достаточным их числом. Также для маскировки можно применить простейшее шифрование.