Mar. 2nd, 2010

Epic fail

Mar. 2nd, 2010 03:29 pm
thedeemon: (Default)
Когда в третьем номере ПФП объявили конкурс, я обрадовался, думал поучаствую, всем покажу. Времени было дано много, можно было не спешить. Я все откладывал, откладывал, а потом внезапно подкрался дедлайн, и я счастливо конкурс пропустил, так и не приступив. Но вдруг окончание конкурса отложили, а в свежем номере журнала упомянули языки присланных решений, и среди них не оказалось Окамла. Тогда в последний момент я все же решил одну задачку сделать; не для победы, так хоть для статистики. Делать взялся экстремистскую задачу про вырезание Московской области из России (условие тут). Интересная часть задачи - определение принадлежности точки произвольной фигуре из ломанных - сделалась очень быстро и проще, чем я ожидал, а вот занудная часть - чтение карты из XML и запись результата - отняла большую часть времени и составила большую часть программы. В итоге для разбора карты был использован ocamlyacc, сгенеренный им парсер превращен в функтор (параметризованный модуль), который дергает callback'и из переданных в качестве параметра модулей обработки. При такой схеме решение все насквозь императивное, при этом во время парсинга выделяется куча мелких строк и списков, списки переворачиваются и многократно обходятся создаваемыми на лету замыканиями, отсюда большая нагрузка на GC, все тормозит и вообще некрасиво.

В условиях конкурса просили сделать упор на корректности, читаемости, комментариях, тестах и т.д. и не заниматься лишней оптимизацией. Я же все сделал наоборот - до последнего пытался делать какие-то дурацкие оптимизации, которые не особо помогали, комментирование оставил на потом, и так до него и не добрался. Оформил задачу тоже плохо, послал за несколько минут до дедлайна, чтобы уже после него получить отлуп от почтового сервера - оказывается, письма перенаправлялись на гмейловский ящик одного из организаторов, а гмейл не допускает exe-шники в приложенных к письму архивах.

В общем, с моей стороны полный фейл, в другой раз постараюсь не откладывать все на последний момент.
Статистика: всего дней, когда хоть немного занимался решением - 3, чистого времени на разработку - 15,5 часов, исходники - 580 строк Окамла (включая файлы для ocamllex и ocamlyacc, но не включая сгенеренные ими), скорость вырезания московской области из двухгиговой карты РФ на рабочем компе - 2,5 минуты в простом режиме и 4:45 в режиме complete objects.

Profile

thedeemon: (Default)
Dmitry Popov

July 2025

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
27282930 31  

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 16th, 2025 08:05 am
Powered by Dreamwidth Studios