Нас было 7 человек. У нас было 20 модулей на хаскеле, приватный репозиторий на гитхабе, 6 веток в этом репозитории, ImplicitParams, MagicHash и UndecidableInstances в коде и одна highmem нода на Амазоне, а также hangouts для общения, юнит-тесты, просто тесты, google docs для заметок и куча статей про SMT-солверы. Не то что бы мы это все использовали, но на ICFPC ты ищешь в инете всякую дурь и бывает трудно остановиться. Единственное что вызывало у меня опасение — это SMT-солверы. Нет ничего более беспомощного, безответственного и испорченного, чем человек, читающий статьи в ходе контеста. Но я знал, что рано или поздно мы подсядем и на эту дрянь.
(Дмитрий Астапов)
Посвящается хабровчанам, которым иногда хочется отдохнуть от промышленного кодинга и найти чего-то такого безумно[ круто]го для души. Ежегодный ICFP Contest начнётся меньше чем через неделю!
Что это
Есть такая International Conference on Functional Programming, раз в год проходящая в разных местах земного шара. К ней приурочен трёхдневный командный контест-хакафон, призёры которого помимо уважухи и денежных призов получают бесплатные билеты. И вот тут начинается самое интересное.
Несмотря на название и тематику конференции, задачи не заточены под какие-то языки и технологии, и писать можно совершенно на чём угодно; а в призовых местах, например, стабильно оказывается C++. Как правило, эталонного решения у них нет, и подходить можно с полной свободой творчества. Сроку отводится трое суток (пятница по понедельник в зависимости от часового пояса участников), в течение которых можно отсылать всякие промежуточные результаты и получать за это очки, и ещё есть lightning division с отдельной таблицей победителей по итогам первых суток. То есть демократия полная – работать можно где угодно, как угодно, каким угодно составом без регистрации
- раскодировать двухмегабайтную виртуальную машину, в которой упихана тонна паззлов вроде юникс-консольки, математических головоломок и текстового квеста (2006);
- помочь пришельцу адаптироваться к нашей планете, распотрошив и дополнив его самомодифицирующуюся ДНК, которая умеет рисовать упоротые картинки (2007);
- научиться играть и выигрывать у других участников в гибрид Magic: the Gathering и лямбда-исчисления (2011);
- написать ботов для альтернативного пакмана, крутящегося на аркадном автомате из лисп-машины и восьмибитного микроконтроллера (2014).
Отличный способ приобщиться и вдохновиться — глянуть отчёты вышеупомянутого Дмитрия Астапова, отчёты которого можно читать как технотриллер. Рекомендую начать с 2006 года, который ни один конкурс пока не переплюнул.
Для участия необходимы навыки командной разработки и возможность хотя бы частично выпать из жизни в уикенд. Очень желателен кругозор в области computer science. Особо приветствуются знатоки и умельцы ИИ, виртуальных машин и компиляторов, эти темы проскакивают почти в каждом году. Хотя, конечно, самое важное – общая соображалка.
Анонс
Теперь немного о том, что же будет в этом году.
Конференция проводится с 31 августа по 2 сентября в Ванкувере, а контест уже совсем скоро – с 7 по 10 августа. Судя по традиционно немногословному анонсу, нас ждёт что-то на криптографическую тематику с аллюзиями на национальную безопасность и творчество Лавкрафта. Имеющиеся крупицы инфы проанализировал постоянный участник ICFPC Turtle//Bazon.
До встречи в турнирной таблице!
potan
А есть статистика среднего числа балов в зависимости от языка?
xoposhiy
Было бы круто, если кто-то такую статистику собрал.
По ощущениям зависимости почти нет. Ощущения можно приобрести самостоятельно тут: en.wikipedia.org/wiki/ICFP_Programming_Contest#Prizes
potan
Там только победители. Понятно, что вероятность победить для языка зависит не только от его свойств, но и от количества учасников, его использующих. Поэтому интересно общее распределение оценок для каждого языка.
Yuuri
Доступной статистики действительно нет. Иногда можно раздобыть сохранённую кем-нибудь таблицу очков (например, за прошлый год вот), если вы возьмётесь её обработать, будет здорово.
xoposhiy
Посчитал за прошлый год:
Источник — официальный гитхабик (https://github.com/icfpcontest2014/icfpcontest2014.github.io/blob/master/results.html)
Если команда указывала несколько языков, то учитывался только первый. Показаны только языки, которые выбрали хотя бы 5 команд.
xoposhiy
Моя вольная интерпретация:
1. C++ и C# выбирают, видимо, те, кто на них программирует по работе или в результате подготовки к классическим олимпиадам (С++). Как следствие неплохие средние результаты.
2. Haskell, наверняка, чаще, чем C++ и C#, выбирают по принципу «Ну хоть тут попробуем этот диковинный язык». Поэтому в среднем результаты хуже. (Впрочем это не помешало Хаскелю заработать первое место :)
br0x
У нас в команде выбор Java обусловлен в основном тем, что один человек на ней очень быстро педалит, а остальные неплохо разбираются, чтобы исправлять/дополнять. Так что средний icfpc выглядит обычно так — Sanny в течение суток набрасывает 100-200к исходников, а потом все дружно оставшиеся двое суток правим баги…
xoposhiy
Про «правим баги» у нас есть правило: все что написано — не работает!
Поэтому все ключевые системы мы сразу обкладываем тестами или тестируем вручную. Это быстрее, чем искать баги после внедрения неработающей штуки.
В этот раз у нас под тестами были: гексагональная арифметика, логика тетриса, логика поиска пути для фигурки, логика манипуляции с фразами силы, input/output, ну и конечно финальные тесты на количество набираемых баллов.
br0x
К стыду своему должен сказать, что мы потратили почти 6 часов на отладку гексагональной арифметики, пока не плюнули и не сделали стратегически важный выбор в пользу системы координат с наклонной осью Y, вместо дебильной вертикально-изломанной. Все внутренние расчеты стали простыми и красивыми, а перевод делался разово.