
Сообщение от
Sandro
Пережал карты комнат вышеописанным алгоритмом.
Код:
66 unique tile maps found
Packed all unique tile maps to 4063 bytes (58.8%), old 4683 bytes (67.8%)
Несжатые комнаты занимают 6912 байт.
Для эксперимента пережал наивным способом (отсутствие разницы с предыдущей комнатой кодируется специальным кодом тайла). Уже 3044 байта!
Где-то ещё байт 400 там можно отыграть ИМХО.
По моим тестам получалось несколько получше:
Код:
Rdesc sums: raw 3234, old encoded: 2352, new encoded: 2072, old ratio: 0.7272727, new ratio: 0.6406927
Rooms sums: raw 6912, old encoded: 5065, new encoded: 2567, old ratio: 0.7327836, new ratio: 0.3713831
Raw length total: 10146
Old encoding length total: 7417, ratio: 0.731027
New encoding length total: 4639, ratio: 0.4572245
Old-new encoding length bonus: 2778, ratio: 0.2738025
См. EncodeRoomNew https://github.com/nzeemin/spectrum-...ogram.cs#L1204
Я помню что экспериментально определил, что на этих данных 63 повтора будет достаточно.
Перед кодированием там комната сравнивается с эталоном, для совпадающих значений используется 0x7F, и для 0x7F отдельная ветка кодирования. Код 0x7F в описаниях комнат не встречается.
Но я не проверял что при таком подходе всё корректно раскодируется, может налажал где.
P.S. Я правда не очень понимаю зачем тут заниматься этим спортом, памяти же более чем достаточно?