Нас было 7 человек. У нас было 20 модулей на хаскеле, приватный репозиторий на гитхабе, 6 веток в этом репозитории, ImplicitParams, MagicHash и UndecidableInstances в коде и одна highmem нода на Амазоне, а также hangouts для общения, юнит-тесты, просто тесты, google docs для заметок и куча статей про SMT-солверы. Не то что бы мы это все использовали, но на ICFPC ты ищешь в инете всякую дурь и бывает трудно остановиться. Единственное что вызывало у меня опасение — это SMT-солверы. Нет ничего более беспомощного, безответственного и испорченного, чем человек, читающий статьи в ходе контеста. Но я знал, что рано или поздно мы подсядем и на эту дрянь.
(Дмитрий Астапов)


Посвящается хабровчанам, которым иногда хочется отдохнуть от промышленного кодинга и найти чего-то такого безумно[ круто]го для души. Ежегодный ICFP Contest начнётся меньше чем через неделю!



Что это


Есть такая International Conference on Functional Programming, раз в год проходящая в разных местах земного шара. К ней приурочен трёхдневный командный контест-хакафон, призёры которого помимо уважухи и денежных призов получают бесплатные билеты. И вот тут начинается самое интересное.
Несмотря на название и тематику конференции, задачи не заточены под какие-то языки и технологии, и писать можно совершенно на чём угодно; а в призовых местах, например, стабильно оказывается C++. Как правило, эталонного решения у них нет, и подходить можно с полной свободой творчества. Сроку отводится трое суток (пятница по понедельник в зависимости от часового пояса участников), в течение которых можно отсылать всякие промежуточные результаты и получать за это очки, и ещё есть lightning division с отдельной таблицей победителей по итогам первых суток. То есть демократия полная – работать можно где угодно, как угодно, каким угодно составом без регистрации и SMS. Ну и наконец, главная фича – задания в контесте упоительно креативные и очень проработанные, и полны тонкого юмора, пасхалок и отсылок. Из наиболее ярких примеров:
  • раскодировать двухмегабайтную виртуальную машину, в которой упихана тонна паззлов вроде юникс-консольки, математических головоломок и текстового квеста (2006);
  • помочь пришельцу адаптироваться к нашей планете, распотрошив и дополнив его самомодифицирующуюся ДНК, которая умеет рисовать упоротые картинки (2007);
  • научиться играть и выигрывать у других участников в гибрид Magic: the Gathering и лямбда-исчисления (2011);
  • написать ботов для альтернативного пакмана, крутящегося на аркадном автомате из лисп-машины и восьмибитного микроконтроллера (2014).

Отличный способ приобщиться и вдохновиться — глянуть отчёты вышеупомянутого Дмитрия Астапова, отчёты которого можно читать как технотриллер. Рекомендую начать с 2006 года, который ни один конкурс пока не переплюнул.
Для участия необходимы навыки командной разработки и возможность хотя бы частично выпать из жизни в уикенд. Очень желателен кругозор в области computer science. Особо приветствуются знатоки и умельцы ИИ, виртуальных машин и компиляторов, эти темы проскакивают почти в каждом году. Хотя, конечно, самое важное – общая соображалка.

Анонс


Теперь немного о том, что же будет в этом году.
Конференция проводится с 31 августа по 2 сентября в Ванкувере, а контест уже совсем скоро – с 7 по 10 августа. Судя по традиционно немногословному анонсу, нас ждёт что-то на криптографическую тематику с аллюзиями на национальную безопасность и творчество Лавкрафта. Имеющиеся крупицы инфы проанализировал постоянный участник ICFPC Turtle//Bazon.

До встречи в турнирной таблице!

Комментарии (9)


  1. potan
    03.08.2015 19:29

    А есть статистика среднего числа балов в зависимости от языка?


    1. xoposhiy
      04.08.2015 07:59

      Было бы круто, если кто-то такую статистику собрал.
      По ощущениям зависимости почти нет. Ощущения можно приобрести самостоятельно тут: en.wikipedia.org/wiki/ICFP_Programming_Contest#Prizes


      1. potan
        04.08.2015 11:50

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


        1. Yuuri
          04.08.2015 12:43

          Доступной статистики действительно нет. Иногда можно раздобыть сохранённую кем-нибудь таблицу очков (например, за прошлый год вот), если вы возьмётесь её обработать, будет здорово.


          1. xoposhiy
            04.08.2015 21:21
            +1

            Посчитал за прошлый год:
            image
            Источник — официальный гитхабик (https://github.com/icfpcontest2014/icfpcontest2014.github.io/blob/master/results.html)

            Если команда указывала несколько языков, то учитывался только первый. Показаны только языки, которые выбрали хотя бы 5 команд.


            1. xoposhiy
              04.08.2015 21:28

              Моя вольная интерпретация:

              1. C++ и C# выбирают, видимо, те, кто на них программирует по работе или в результате подготовки к классическим олимпиадам (С++). Как следствие неплохие средние результаты.

              2. Haskell, наверняка, чаще, чем C++ и C#, выбирают по принципу «Ну хоть тут попробуем этот диковинный язык». Поэтому в среднем результаты хуже. (Впрочем это не помешало Хаскелю заработать первое место :)


              1. br0x
                11.08.2015 15:21

                У нас в команде выбор Java обусловлен в основном тем, что один человек на ней очень быстро педалит, а остальные неплохо разбираются, чтобы исправлять/дополнять. Так что средний icfpc выглядит обычно так — Sanny в течение суток набрасывает 100-200к исходников, а потом все дружно оставшиеся двое суток правим баги…


                1. xoposhiy
                  11.08.2015 17:04
                  +1

                  Про «правим баги» у нас есть правило: все что написано — не работает!
                  Поэтому все ключевые системы мы сразу обкладываем тестами или тестируем вручную. Это быстрее, чем искать баги после внедрения неработающей штуки.

                  В этот раз у нас под тестами были: гексагональная арифметика, логика тетриса, логика поиска пути для фигурки, логика манипуляции с фразами силы, input/output, ну и конечно финальные тесты на количество набираемых баллов.


                  1. br0x
                    11.08.2015 17:13

                    К стыду своему должен сказать, что мы потратили почти 6 часов на отладку гексагональной арифметики, пока не плюнули и не сделали стратегически важный выбор в пользу системы координат с наклонной осью Y, вместо дебильной вертикально-изломанной. Все внутренние расчеты стали простыми и красивыми, а перевод делался разово.