Запоздало спешу представить на суд внимательного читателя отчёт о проведении конкурса по функциональному программированию под эгидой Фонда Поддержки Функционального Программирования ФП(ФП) в июне месяце сего года. Всем желающим была предложена задача, которую предложил на конкурс один наш добрый коллега, участвовавший в своё время в разработке решения задачи про полубезумного Доктора Х (см. отчёт на Хаброхабре «Поиск скрывающегося Доктора X среди пациентов — решение более сложных логических задач»). Условие задачи было таково…
Необходимо было написать программу, которая осуществит расшифровку представленного ниже в виде кодограммы послания. На конкурс принимались, как обычно, программы на любых языках программирования, но предпочтение отдавалось функциональной парадигме. По замыслу, после запуска программа должна выполнить подбор и поиск решения, после чего вывести его на экран. А вот и сама кодограмма:
Один восточный мудрец проникся духом Олимпийского движения и послал барону Пьеру де Кубертену ребус-шараду, в котором закодировал послание всем добрым людям мира:
Но мудрец не был бы самим собой, если бы не сделал всё это в виде математической головоломки. Как вы видите, здесь у нас есть диаграмма Венна, показывающее пересечение пяти множеств. Каждый сектор, образуемый пересечением, помечен буквой или каким-то иным символом, в том числе пробелом. Необходимо расставить числа от 1 до 15 в секторах таким образом, чтобы суммы чисел в каждом из пяти множеств, помеченных цветными кольцами, были равными друг другу. Это даст ключ к расшифровке послания.
Не совсем понятно почему, но задача оказалась не совсем уж и интересной. В конкурсе приняло участие всего только два человека, а ещё несколько вполне успешно «навангавали» правильный ответ, что, впрочем, за участие и тем более решение не засчитывалось. Ну а я сам, как обычно, предлагаю ознакомиться с кратким отчётом, описывающим решение поставленной задачи на прекрасном языке Haskell.