Entry tags:
ICFPC-2011: "Ітогі підведьом"
Окончание. Начало здесь, вторая часть здесь.
Получили невероятное удовольствие. Оно было бы ещё больше, если бы мы на второй день таки-вывели и написали универсальный компилятор в LtG — но увы :D

Читал я как-то годную фэнтезю — Бэккера, "Князь пустоты". Там есть сцена поединка магов.
Клан первого из них, "Завет" — владел магией высших порядков, хотя всегда жил крайне скромно. Другой маг был большим человеком в самом богатом магическом клане "Багряных Шпилей" — но вот беда, никто, кроме Завета, высшей магией не владел. Все прочие кланы строили свою карьеру на заклинаниях, подобранных наугад, Завет же владел теорией.
Маг Шпилей вызвал самого сильного духа, какого мог, своими эмпирически подобранными заклятиями (сильнейшими в клане, заметьте). И до смерти удивился, когда полуживой маг Завета с помощью заклинаний-Абстракций (они и правда так назывались!), без усилий размазал духа и соперника тонким слоем по окрестностям.
Примерно таким же тонким слоем чувствовали себя мы перед чемпионами, потому что:
Четыре японских хаскеллиста:
Вот у меня недавно
dima_kender спрашивал старый вопрос — какой язык программирования лучше для быстрой разработки :D
Я ответил старый ответ — язык, который хорошо знает команда. Ну и смотря чего разработка — десктоп, простой веб, рич веб, сложная логика или CRUD, с БД или без.
И дал свои предварительные ответы, при прочих равных:
Для веба — Rails, для десктопа — Windows.Forms.
Но если программисты и задача пыц-пыц какие умные, то Haskell, как показали последние дни.
Часть третья
Получили невероятное удовольствие. Оно было бы ещё больше, если бы мы на второй день таки-вывели и написали универсальный компилятор в LtG — но увы :D

Читал я как-то годную фэнтезю — Бэккера, "Князь пустоты". Там есть сцена поединка магов.
Клан первого из них, "Завет" — владел магией высших порядков, хотя всегда жил крайне скромно. Другой маг был большим человеком в самом богатом магическом клане "Багряных Шпилей" — но вот беда, никто, кроме Завета, высшей магией не владел. Все прочие кланы строили свою карьеру на заклинаниях, подобранных наугад, Завет же владел теорией.
Маг Шпилей вызвал самого сильного духа, какого мог, своими эмпирически подобранными заклятиями (сильнейшими в клане, заметьте). И до смерти удивился, когда полуживой маг Завета с помощью заклинаний-Абстракций (они и правда так назывались!), без усилий размазал духа и соперника тонким слоем по окрестностям.
Примерно таким же тонким слоем чувствовали себя мы перед чемпионами, потому что:
- надо было овладеть новым, "магическим" языком;
- он почти что так и назывался - только слово Magic заменили словом Lambda;
- мы тыкались в темноте, оттачивая комбинации наших примитивных эмпирических "заклинаний";
- те, кто освоил теорию, в мгновение ока (от 200 до 900 ходов) выносили "в ноль" наш тщательно, вручную подобранный раш.
- Браузнуть сырца можно тут: http://svn.victorsergienko.com/icfpc2011/trunk/domain-model/
- Итого — примерно 71К на Груви + 35К юнит-тестов на нём же.
- Нам не хватало как минимум одного, третьего программиста. И вообще, два программиста и два математика — это в четыре раза слабее, чем четыре программиста-математика. У японцев-Atomic-ов, которые, наверняка, станут чемпионами, как раз столько и было :)
- Команда Ciklum бултыхается где-то в полупроходниках со своими 21-23 победами из 30 на неофициальном сервере.
А как оно было у японцев...
Четыре японских хаскеллиста:
- собирали части пушки в разных словах (потом оказалось, что иначе в этом SKI-исчислении никак);
- авто-компилировали все стратегии;
- умели, если им что-то сломали, оживлять ячейку и продолжать любую (!) старую стратегию с того места, на которое возможно откатиться (!!!), и собирали подходящие запчасти по разным слотам (!);
- У меня самовосстанавливаться умеют только две очень частных стратегии - dec() слабой ячейке врага, и revive() своей.
- ещё они написали свой тестовый-контестовый сервер — от нечего делать, надо полагать.
- эти монстры научились убивать "sitting duck" в 165 ходов.
Вот у меня недавно
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Я ответил старый ответ — язык, который хорошо знает команда. Ну и смотря чего разработка — десктоп, простой веб, рич веб, сложная логика или CRUD, с БД или без.
И дал свои предварительные ответы, при прочих равных:
Для веба — Rails, для десктопа — Windows.Forms.
Но если программисты и задача пыц-пыц какие умные, то Haskell, как показали последние дни.
no subject
no subject
no subject
Все, что было после публикации сорцов (123 хода) - это не в счет.
У нас получалось 177 в 10% случаев
no subject
no subject
no subject
На контесте - только хорошее. Очень довольны, что в стеке нет пяти внутренних вызовов на каждый наш. Работает очень стабильно, does the thing, и практически незаметен.
Местами, конечно, встречаются несовместимости с компилятором Groovy, но всегда можно переписать, чтобы компилировалось.
Чудес ленивых вычислений от Groovy никто не ждёт, поэтому, например, когда не компилится List a; a.sum{ it.toDurationMillis() }, переписываем на a.collect{ it.toDurationMillis() }.sum().
До сих пор интересно, как это он показывает на некоторых тестах лучшее время, чем Java.
А ещё мы его начали внедрять и в продакшн, на Grails-овый сайт. Внутренние классы сервисов, если их перезагрузить в дебаге, оказываются в другом класслоадере, и, соотв., обращение к ним вызывает ошибку. На IBM-овском JDK не деплоится.
Ну и ещё парочка мистерий там таится, но пока обходим.
В общем, большое спасибо!