Сжатие строки до уникального идентификатора - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть игра, в которой пользователи могут создавать собственные уровни. В настоящее время я генерирую некоторый JSON, который кодирует уровень, но я хочу, чтобы пользователи могли легко обмениваться уровнями (желательно с идентификатором до 10 символов). Нет подключения к интернету, поэтому вся информация об уровне должна быть закодирована в этот идентификатор, чтобы игра могла расшифровать его и сгенерировать уровень.

Я пробовал разные виды алгоритмов шифрования и сжатия, но, похоже, не могу получить его на разумной длительности. Хеширование не сработает, так как мне нужно его разбить на части и иметь очень низкие (0) коллизии, поскольку он должен кодировать этот определенный сгенерированный уровень.

Есть ли лучший способ сделать это? Я понимаю, что пытаюсь втиснуть данные в 10 символов, но если я использую совокупность из 91 символа, это даст мне 6 426 898 010 533 различных возможных идентификатора уровня.

Мои пользователи прокляты длинными идентификаторами или есть лучший способ сжать (предпочтительно данные JSON) в короткую строку? Данные JSON увеличиваются с ростом уровня. Меня не волнует безопасность. Если кто-то поймет, как его декодировать, он просто получит бесполезный JSON.

1 Ответ

0 голосов
/ 05 сентября 2018

Я пробовал разные виды алгоритмов шифрования и сжатия, но, похоже, я не могу получить его на приемлемом отрезном отрезке. Хеширование не сработает, поскольку мне нужно его разбить на части и иметь очень низкие (0) коллизии, поскольку он должен кодировать этот определенный сгенерированный уровень.

ИМХО, это все о количестве информации и "сжимаемости" данных. Использование некоторого текстового формата (JSON, ..) только взрывает его. Может быть, вы могли бы просто закодировать (base64?) Какое-нибудь эффективное двоичное представление (+ хеш / контрольная сумма для проверки целостности данных).

Независимо от того, что описание всего уровня может быть достаточно большим, чтобы просто набирать текст. Даже сжатие не поможет при высокой энтропии, и нет повторяющихся паттернов.

Возможно, вы могли бы использовать другой транспорт, например, для мобильного Bluetooth (инфракрасный порт сегодня не так распространен) или последовательный порт для компьютеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...