Dmitry Jemerov ([info]yole) wrote,
@ 2007-07-26 01:20:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
ICFP Postmortem: Team ryba
Итак, обещанный отчёт. :)

То, что поискать команду я решил в последний момент, проблем не составило - для того, чтобы найти достаточное количество желающих поучаствовать, оказалось достаточно пройти по офисному коридору из конца в конец и обратно. В офисе мы и провели, наверное, где-то две трети из 72 часов, отведённых на контест. :) Женьку я предупредил, что зароюсь нафиг на эти выходные и рассчитывать на то, что я куда-то с ней поеду, не стоит - но я и не подозревал, насколько сильно я на самом деле зароюсь.

Обсуждения по поводу языков и технологий у нас особенного не было. Дождавшись 14:00, скачав и по диагонали прочитав PDF'ку с заданием, я подошёл к Майку спросить, собирается ли он участвовать, и услышал в ответ "я уже педалю" и увидел открытую на его маке идею с зачатками структур для DNA. Так что обсуждать было нечего - я сказал, что берусь делать интерпретатор RNA, и пошёл его кодить.

(Для тех, кому лень читать задание, немного поясню. Задание состоит в том, что нам даётся DNA - фактически программа для некоторой непонятно как устроенной виртуальной машины, которая рисует некую картинку. Требуется прислать префикс к этой программе, который патчит её так, чтобы она рисовала другую указанную картинку, или максимально на неё похожую. Для каждого префикса вычисляется риск - 10 баллов за каждый пиксел, который отличается от требуемой картинки, и 1 балл за каждый символ префикса. Побеждает тот, кто пришлёт префикс с наименьшим риском.

Процесс выполнения DNA, по сути своей, представляет последовательность поисков и замен регулярных выражений в этой самой DNA. По ходу её выполнения она также может выдавать RNA - это простые векторные графические команды, посредством которых, собственно, и рисуется картинка.)

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

Тем временем Роман засабмитил на сервер префикс, который был дан в качестве хинта в задании, и обнаружил, что DNA с этим префиксом рисует картинку самопроверки (и при этом, похоже, довольно неплохо проверяет всякие хитрые случаи в интрепретаторе). Как это всё происходило - мы пока не поняли, но на вооружение взяли. Олег в это время написал утилитку для вычисления разницы между двумя картинками.

Следующие часа три ушли на багфиксинг, а также на написание интерпретатора, который рисует картинку сразу по мере генерации. (Multicore friendly, кстати: один тред обсчитывает DNA, а другой рисует картинку.) Пока мы запускали DNA с префиксом self check, мы увидели, что перед основной картинкой он рисует на экране ещё какие-то буковки, подозрительно похожие на префикс DNA, которые потом стирает. К сожалению, засамбитить его на сервер и получить оттуда картинку мы не могли - картинку мы получаем только в том случае, если у нового префикса риск меньше, чем у того, который мы сабмитили в прошлый раз.

Рабочий день, тем не менее, ещё не закончился, и нам всем приходилось отвлекаться на дела, связанные с работой. Разобравшись с выпуском очередного EAP-билда, я порывался сесть и начать писать векторизатор результирующей картинки (чтобы не обводить полигоны руками), однако по счастливой случайности изучение её в Photoshop я начал с рассматривания вагончика в самой середине картинки. Заливка вагончика оказалась не однотонной, а с некоторым dithering'ом, а оценка результата не зависит от того, насколько я ошибся с цветом пиксела - засчитывается только точное совпадение. Поэтому я решил, что кодировать картинку всё равно придётся попиксельно и время на векторизатор можно не тратить (и, как потом выяснилось, это было крайне справедливо).

Тем временем, наш интерпретатор заработал достаточно хорошо для того, чтобы мы смогли отрендерить с его помощью префикс, вытащенный из self check. Результат оказался очень интересным, и мы поняли, что тут всё куда круче, чем казалось на первый взгляд...
to be continued...


(Post a new comment)


[info]astaff
2007-07-26 08:31 am UTC (link)
Класс! А слово "педалить" -- это чудестный артефакт харьковского IT. Я ее кроме как в Харькове больше нигде не слышал.

(Reply to this)(Thread)


[info]9000
2007-07-26 09:39 am UTC (link)
Да уж, класс :)) Завидно даже.

"Педалить" -- это прямая параллель "legwork", вероятно ;)

(Reply to this)(Parent)(Thread)


[info]astaff
2007-07-26 11:22 am UTC (link)
Ну, "legwork" -- это, скорее, research and specification phase. ;)

(Reply to this)(Parent)


[info]mm_aa
2007-07-26 10:32 am UTC (link)
Думаю это я завез :)

(Reply to this)(Parent)(Thread)


[info]astaff
2007-07-26 10:52 am UTC (link)
Та да...

(Reply to this)(Parent)


[info]skavish
2007-07-26 06:50 pm UTC (link)
ни фига подобного. на питерском матмехе мы (ВЦ-шные ночные хакеры) употребляли это еще в начале девяностых :)

(Reply to this)(Parent)


[info]kadim
2007-07-26 09:51 am UTC (link)
О навертели :) требую продолжения!

(Reply to this)


[info]jerom
2007-07-26 06:32 pm UTC (link)
А дальше когда?

(Reply to this)


[info]skavish
2007-07-26 06:51 pm UTC (link)
афтар пеши исчо

(Reply to this)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…