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

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

Мои любимые приложения для отработки алгоритмов

Проект Эйлер

Математические задачи становятся все сложнее и сложнее

Красота проекта Эйлера в его простоте. Вы получаете задачу, а под ней есть текстовое поле, в котором вы можете написать свой ответ — в основном просто число. Первые несколько задач очень легкие, но они довольно быстро начинают усложняться. Я попытался проверить свою учетную запись и был немного разочарован, обнаружив, что я добрался только до задачи номер 12. Однако, если вы начинающий программист, даже первые несколько задач будут отличным упражнением.

КодСигнал (CodeFights)

Геймификация, различные уровни сложности, ежедневные задания, сообщество

Думаю, я обнаружил это веб-приложение, когда оно только начиналось. Первоначальная концепция заключалась в том, что вам будет сопоставлен случайный игрок со всего мира, и вы устроите кодовый бой. Это означает, что вам обоим нужно будет решить 3, в основном, простых задачи, и вы будете получать баллы в зависимости от того, насколько быстро вы решите эти задачи. Побеждает самый быстрый. На самом деле это было довольно увлекательно, потому что вы могли видеть, как быстро прогрессирует другой игрок, и вы чувствовали необходимость быть быстрее.

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

Даже тогда, когда основной задачей сайта были бои за код, также существовали ежедневные и еженедельные задачи по программированию. Задачи были чуть более сложными задачами, на решение которых уходило от 5 минут до часа. Вы могли (и все еще можете) попробовать некоторые задачи, которые, как говорили, появляются в интервью для больших технологий. Есть интересный аркадный режим, в котором вы просто продвигаетесь по задачам программирования. Вы получаете очки и достижения за решение задач. Эти задачи не слишком сложны, что позволило мне продержаться дольше, так как у меня не было демотивации. Вы получаете баллы за решение задачи, а также значки за различные достижения. Это хоть немного напоминает игру.

Мне было очень грустно узнать, что оригинальный функционал борьбы с кодом был полностью удален из приложения. Или, по крайней мере, я больше не мог его найти.

Не стесняйтесь проверить мой профиль.

Кодилити

Профессиональные, более сложные задачи, требующие некоторых знаний алгоритмов, используемых на собеседованиях

Это больше профессиональная платформа, чем CodeSignal. Я думаю, что в конечном итоге CodeSignal хотел бы стать именно таким. У него есть довольно хорошее программное обеспечение для оценки, которое пытается определить сложность ваших алгоритмов и также оценивает вас на основе этого. Задачи на этом сайте требуют более глубоких знаний, чем задачи на CodeSignal. Они требуют, чтобы вы действительно знали некоторые алгоритмы или, по крайней мере, возможные способы решения задачи (динамическое программирование, жадные алгоритмы и т. д.). ).

Codility используется некоторыми компаниями в процессе найма. Например, Топтал использует эту платформу для проведения собеседований с кандидатами. Это также хорошая причина, чтобы попытаться решить некоторые проблемы, предоставляемые этим приложением.

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

Codeforces, TopCoder, HackerRank

Соревновательное программирование, очень сложные задачи, сообщества

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

Последнее примечание

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

Если вы ищете другие способы стать лучше как разработчик, посмотрите этот выпуск подкаста (на словацком).