Dark Magus (_darkus_) wrote,

Условия январского конкурса по функциональному программированию

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

Теперь же перейдём к условиям январского конкурса. Во времена, когда я был студентом и учился в институте, я мощно рубал информатику и программирование, и слава обо мне шла не только в группе или потоке, но и вообще по всему курсу. Так что ко мне приходили двоечники со всего института. Я им, бывало, помогал решать лабораторные работы по информатике. А иной раз подшучивал по-программистски. Написал кодировщик, который циклически и побайтно применял к заданному файлу ключевое слово при помощи операции XOR (исключающее ИЛИ). Из файла получалась полная белиберда, но если применить то же самое слово тем же способом, то файл полностью восстанавливался (в силу закона логики (a XOR x) XOR x = a). И вот как-то раз я упомянул про это в разговоре с одним своим знакомым. А он сказал, что для него никакого труда не составит расшифровать закодированный таким образом файл, ибо это не шифрование, а полное фуфло. Поскольку тот учился на факультете информационной безопасности, я было поверил, а потом решил проверить. Итак, мы договорились, что я дам ему зашифрованный файл с исходниками на языке C++ размером не менее 10 Кб. Размер ключа был неограничен, но он должен был состоять только из символов латинского алфавита в заглавном регистре. Как сейчас помню, ключом было слово EXCALIBUR. Я выдал знакомому файл и договорились, что не позже, чем через три дня, он отдаст мне результат. В итоге, я проиграл — он взломал код, причём сделал это достаточно быстро. Не знаю, чем он пользовался для работы, история об этом уже умалчивает.

Это была прелюдия. А теперь условия. Вот здесь можно скачать файл для расшифровки: зашифрованный файл. Файл заархивирован, так что сначала его надо разархивировать. После этого придумать алгоритм и расшифровать файл. После расшифровки вы получите код на языке Haskell. Его надо запустить один раз. Функция main выдаст на экран семизначный код, который надо опубликовать в комментариях к этой записи вместе со ссылкой на свой исходный код, который помог вам решить задачу. Тем, кто сомневается, как запустить код на языке Haskell, рекомендую воспользоваться сервисом Codepad. Ограничения на ключ таковы: ключ состоит не более, чем из пяти заглавных букв латинского алфавита. Можете расшифровать силой, можете найти какие-либо специальные эвристики. Дерзайте.

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

Вроде бы всё. Условия по получению призов традиционные. И как обычно призываю вас разнести весть о конкурсе по всем этим вашим интернетам. Пусть больше хороших участников участвует. Призов хватит на всех.

Дополнение 1: Поскольку я как-то не предугадал «грязного хака» с подстрокой module Main в начале файла, ссылка на файл обновлена. Прошу скачать новый файл, все присланные результаты обнулены с 09:30 13.01.2012.

Дополнение 2: 16.01.2012 в 07:22 комментарии раскрыты, начато подведение итогов.

Дополнение 3: Результаты опубликованы.

Предыдущие конкурсы:
1. Задача о возрастах детей математика: условие, результаты.
2. Кто на ком женат: условие, результаты.
3. Задачи о переправах: условие, результаты.
4. Задача о надёжности кода: условие, результаты.
5. Задача о конструировании чисел из чисел: условие, результаты.

Если вы хотите дополнительно отблагодарить организатора (то есть меня), но не знаете как, то вам сюда. Собранные благодарности пойдут прямиком в ФП(ФП).
Tags: ФП
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded  

  • 93 comments