Ну что? Рассказывайте, какое решение принял ЛВ! :)
Я не знаю выиграл ли что-нибудь мой Архиватор, но свои мысли "по теме" таки расскажу :)
Часть первая. "LZ"
Четверг. Вечер. Реализую две новые гениальные мысли по оптимизации банального LZ. На этот момент я уже знал, что в Дельфяцкой строке можно хранить все символы кроме двух:
#10 и #39 (апостроф). Кстати в IDE Delphi исходник без #13 символов крайне забавно выглядит :)) Но при этом работает!
Итак, алгоритм у меня стал с задатками оптимального кодирования выходной информации. Словарь - треть входного файла, пара (смещение, длина) кодируется либо 2 либо 3 байтами в зависимости от! Биты в байтах распределены таким образом, чтобы те самые #10 и #39 встречались как можно реже. Добиваюсь 83960 (если не ошибаюсь...) Пытаюсь прикрутить еще пару идей - выигрыша не дают...
Замученный сабмичу и иду спать :)
Пятница. Утро.
Понимаю, что 8 часов назад, определённо будучи не в себе, почему-то оставил неиспользованными 2 бита, при 3-байтовом кодировани :)) Срочно правлю, делаю какую-то тривиальную ошибку в декодере, кучу времени отлаживаю (ибо с размером словаря 2^17 байт отладка становится мучительно долгой :))
Когда, наконец, все заработало, получаю 83060 (или около того). Целых 2 лишних бита дали выигрыш всего в 1 Кб!!!!
Жуть. Даже сабмитить не стал.... Отчаился...
Часть вторая. "zlib"
Пятница. Утро. Работа.
На работе, как известно, настроение рабочее. На геройства и исследования не тянет. Как-то получается взглянуть на задачу и предложенные инструменты (C++ и Delphi) с другой (рабочей) cтороны.
Хм... хм-хм...
Не долго думая создаю новый проект в Дельфе, пишу:
uses
Classes, zlib;
:))
И действительно! Предлагаемый инструмент Delphi имеет достаточно продвинутое средство для решения предложенной задачи. Грех не воспользоваться!!! И главное формально все честно:
Запретить использовать модули - нельзя! Ибо С-шники без подключения заголовочных файлов вообще ничего сделать не смогут. zlib никакие сторонние библиотеки не использует - линкует obj-файлы. zlib поставляется с Delphi, как неотъемлемая его часть.
Формально, назвать такой способ читерством нет никаких возможностей %)
Однако, почему-то остается чувство вины перед остальными участниками... К чему бы это? ;))
Короче свой второй солюшен я написал минут за 40. Все, что надо было - это избавиться от #10 и #39 после zlib-ования, а в декодере вернуть их обратно перед де-zlib-ованием :))
В общем на сколько мне известно, мой первый LZ-солюшен занимал 5-ое место, а второй zlib-овый - 3-е.
Кто виноват? ЛВ конечно! %) Если надо проверить умение решать квадратное уравнение, не надо давать испытуемому калькулятор с кнопкой "решить квадратное уравнение" :))
Вот такую вот себе задачку подкинул ЛВ - решить что же делать с zlib-ом :)
А я вот сижу и мучаюсь, так и не зная, как же он этот казус обошёл... Может расскажете, а?
На самом деле я бы совершенно спокойно это принял, если бы мой zlib-овый солюшен дисквалифицировали. Но стал бы спорить! Спорить и спорить! Ибо я был прав, хоть и поступил нечестно :)) А поскольку поступил нечестно, то и не постил этот пост раньше награждения :)
А я пока отдельно поздравляю Дена Расковалова и Женю Крохалева! Они сделали промышленный zlib!!!
Легко и непринужденно :))
Правда к zlib требования немного другие... Быстрая упаковка, да всё такое прочее... но это неважно :)
Поздравляю! :))
PS. Эй! Кто еще не спит? Ну расскажите, кто какие места заполучил!!!
Я на ДММ прийти не смог - сейчас от любопытства мучаюсь...