CodeAbbey — по мотивам ProjectEuler но без математики

Впервые попав на сайт ProjectEuler я был в восторге. Решив штук 40 задач, впрочем, заскучал. Какая жалость, — подумал я — что нет такого же, но с перламутровыми пуговицами менее «математическим» и более «программистским» уклоном…Сайт CodeAbbey пошёл по стопам ProjectEuler — здесь точно так же для решения задачи нужно отправить правильный ответ.

1e564c2117ae78b65e94c15cd179caa7.jpg

Впрочем, исходные данные к задачам генерируются случайно, поэтому один и тот же ответ к задаче два раза не подойдёт. Кроме того вместе с ответом предлагается (хоть и не требуется) отправлять свой исходник.

Чужие исходники можно посмотреть после того как решил задачу. Свои тоже можно — особенно это актуально для задач связанных между собой.

Как это работает можно посмотреть по шагам по ссылке «demo» — я попробую изложить то же самое, но по-русски:

Шаг 0 — регистрация Для регистрации можно войти через FaceBook или Google аккаунт — можно также просто придумать себе логин и пароль (главное не забыть — к сожалению функционала для напоминания пароля пока не видно) и войти с помощью отдельной формы.

Шаг 1 — список задач 2be1a272a80c4b28e59deb79cc9a5734.png

Список задач доступен по ссылке «Problems» в верхней части страниц. Можно заметить что задачи разбиты на несколько групп «Volumes» и по умолчанию показываются те что из основной группы. Переключиться на несколько более сложные можно разными путями — например по ссылке «Volumes» доступен собственно список групп.

В листе задач помимо названия указано сколько человек уже решили эту задачу и сколько очков за неё можно получить. Эти два числа связаны непосредственно — чем меньше решений — тем «дороже» задача.

Щёлкнем по названию задачи чтобы посмотреть условие.

Шаг 2 — условие задачи и форма отправки a5acb5421cc8a390b4680f6a4fe56357.png

Условие задачи может быть коротким или длинным. Например здесь требуется сосчитать количество гласных букв в предложении. Сверху указано в какие группы задача входит — иногда это можно расценивать как маленькую подсказку.

Завершается условие описанием формата входных и выходных данных, а также примером этих данных.

Ещё ниже мы видим окошечко с предлагаемыми входными данными. Их можно например выделить-и-скопировать (Ctrl-A, Ctrl-C) себе в файл, в консоль и т.п. чтобы «скормить» своей программе.

Далее идёт форма отправки:

328d84aedcfc790c75a981405a4de56e.png

Свой код нужно (можно) вставить в окошко »1», а полученный ответ в поле »3», после чего нажатием кнопки отправки »4» можно узнать, насколько ответ правильный.

Кнопки справа снизу »2» позволяют выполнить решение на удалённом сервере (если он работает) или в браузере (для javascript) — в этом случае данные нужно читать обычно со стандартного ввода и писать в стандартный вывод. Некоторые подсказки на этот счёт есть по ссылке «How to run your solution».

Если всё сделано как надо, то появится вот такая картина:

32405a0e7f2aa32f88f210ea1e79edc9.png

Самое важное здесь — слово «Correct». В случае неправильного решения будет показан ожидавшийся от вас ответ (может это поможет при следующих попытках) и предложено попробовать ещё раз (ну можно и за другие задачи вместо этого взяться).

Кроме того показано сколько примерно вам начислено очков. Поскольку они зависят от количества решивших, этот показатель впоследствии пересчитывается каждые 15 минут — и зайдя на следующий день можно обнаружить что сумма несколько упала (или подросла).

Ещё ниже приведены авторские комментарии по задаче (если они для данной задаче есть) — какие-то подсказки на тему хороших и плохих решений и т.п.

Шаг 4 — просмотр чужих решений Как со страницы списка задач, так и со страницы оповещающей об успешном решении можно перейти к списку других решений этой задачи:

a13838940ae0ff240665b5a5febbbf0e.png

Здесь приводятся несколько случайно выбранных решений — полезно отфильтровать их по интересующему вас языку. Язык решения определяется автоматически (и не всегда правильно).

Далее нужно просто щёлкнуть по имени автора (например «ThisIsEasy» как на картинке) чтобы посмотреть его исходник:

62115def42d449f2fecc022ae7c18aa0.png

Под чужими решениями можно оставить комментарий — впрочем по-моему эта возможность актуальна только когда решаешь задачи на пару с коллегой / другом / однокашником.

Если это наше собственное решение то здесь ещё появится маленький выпадающий список для изменения языка, если он был определён неправильно.

Шаг 5 — таблица рейтинга 2b9d33babff8b4ec8a1f4c0f4b6ac792.png

Здесь участники ранжируются по тому, сколько набрали очков за решение задач. Кроме самих очков (enlightenment) и количества решённых задач можно видеть что пользователям присваиваются разные звания (цвета) на основе именно количества задач, а не рейтинга — ну это «фича фор фан», смысловой нагрузки в ней нет.

Также можно указать страну которую мы представляем (на странице настроек) — если этого не сделать то будет отображаться невыразительный вопросительный знак вместо флажка.

Недавно появилась новая колонка (на картинке её ещё нет) — язык на котором пользователь пишет — он определяется в этой таблице по наиболее часто используемому пользователем. Т.е. если 10 задач решено на C++ и 17 на Python то это будет именно Питон.

Заключение Как видим, сайт отличается от ProjectEuler (который взят за прототип) небольшим количеством дополнительного функционала (пожалуй просмотр решений актуальнее всего) и отсутствием «уклона» в математику (хотя отдельная группа с прикладными околоматематическими задачами есть).

В этом некий плюс —, но и некий минус, возможно — т.к. задачи начинаются с самых примитивных (сложение чисел, выбор минимума из двух или трёх и т.п.) и отсутствие «головоломного» элемента может показаться скучноватым.

Более «головоломные» задачи, впрочем, присутствуют и выделены в отдельную группу. Конечно они не такие зубодробительные как задачки с прекрасных ресурсов Codeforces или TopCoder, но тем не менее могут на некоторое время озадачить. Самые сложные на текущий момент, как можно видеть — про Пасхальные Яйца и про Странствующего Торговца.

От упомянутых «спортивных» ресурсов сайт отличается тем что не имеет своего Online Judge-а для тестирования решений. Очевидный недостаток — можно написать неэффективное решение и выполнять его на своем компьютере хоть час, хоть день. Очевидное преимущество в том же самом :)

Впрочем для некоторых задач требующих оптимального решения входные данные таковы, что неоптимальное будет работать не час и не день, а гораздо больше.

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

В целом надеюсь что для начинающих склонных «учиться через практику» здесь найдётся некая польза. Как курьёзный пример можно рассматривать что один из наиболее успешных участников StephenR — преподаватель музыки из Уэльса, решивший ближе к пенсии заняться программированием в качестве хобби :)

© Habrahabr.ru