?

Log in

No account? Create an account
TopCoder - Олег Етеревский [entries|archive|friends|userinfo]
Oleg Eterevsky

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

TopCoder [12 May 2010|17:02]
Oleg Eterevsky
[Tags|]

Решил тряхнуть стариной и поучаствовать в этом году в TopCoder Open. Я в эти игры уже года три не играл. Точнее, в один из последних лет я банально забыл пройти квалификацию, в другой -- забыл о первом туре, в третий -- забыл о третьем. Интересно, на каком туре я сломаюсь в этом году? Квалификацию только что прошёл неплохо.
LinkReply

Comments:
[User Picture]From: bik_top
2010-05-12 03:14 pm (UTC)
Я сужу по своему опыту. Решал «в песочнице» задачи старых SRM'ов на C# 2.0, C++, C# 3.0 (LINQ) и F#.

Решение подавляющего большинства тамошних задач, на мой взгляд, ограничивается лишь манипулированием функциями высших порядков map—filter—fold. Чтобы оно откомпилировалось в Арене, мне приходилось декларативный код переводить в эти ваши вложенные циклы. Что приводило к увеличению кода, времени и числа ошибок.

Вместо манипулирования коллекциями приходится манипулировать элементами этих коллекций.
Вместо комбинирования собственно функций приходится возиться с их аргументами.
Приходится придумывать ненужные имена связанным переменным (pointful programming).
Приходится вводить изменяемые состояния по техническим причинам, объективно не обусловленным. Всё это мешает, отнимает время, внимание, рассредотачивает.

Все эти for, ++j, a[i] — их нет у меня в голове в момент решения, это навязанные языком артефакты.

Есть разные причины, почему в промышленном коде считаются предпочтительными привычные императивные ОО-языки, а не функциональные. Но ведь в блиц-задачах типа SRM — ФЯПы только в путь!
(Reply) (Parent) (Thread)
[User Picture]From: eterevsky
2010-05-12 03:34 pm (UTC)
И фолды, и циклы обладают своими потенциальными багами. Но вообще, по большому счёту, всё это -- небольшая надстройка. Если рука набита, то нужный код пишется очень быстро. В олимпиадных задачах очень редко упираешься собственно в скорость написания кода. Вот в сегодняшней квалификации, например, было три задачи на 75 минут. Решение каждой занимало не больше экрана. Так что основная сложность именно в том, чтобы придумать что и как, а не написать сам код.
(Reply) (Parent) (Thread)