Проект Эйлер: задачи, которые может решить только настоящий программист

Аватар Никита Прияцелюк
Отредактировано

Говорят, что каждый уважающий себя разработчик должен решить хотя бы несколько задач Проекта Эйлера. Разбираемся, какие преимущества он даёт.

53К открытий54К показов
Проект Эйлер: задачи, которые может решить только настоящий программист

Разработчику практически всегда нужно решать разнообразные задачи и нет ничего лучше, чем практика. В Проекте Эйлер есть огромное количество различных заданий, которые помогут держать свой мозг в тонусе.

Особенности платформы:

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

Однако сначала несколько слов о самом проекте.

Проект Эйлер

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

Есть задачи разного уровня сложности, поэтому каждый, если постарается, найдёт ту, с которой сможет справиться. Сложность можно приблизительно оценить по количеству пользователей, решивших задачу. Не возбраняется пользоваться поисковиками, однако авторы предупреждают, что между поиском нужной информации и копипастой чужого решения есть тонкая грань, за которую не стоит заступать — ведь в чём тогда ваше достижение?

Вот пример простой задачи, самой первой в списке:

Если выписать все натуральные числа меньше 10, кратные 3 или 5, то получим 3, 5, 6 и 9. Сумма этих чисел равна 23.Найдите сумму всех чисел меньше 1000, кратных 3 или 5.

А вот сложная задача, которую решило всего 157 участников:

Пусть G(a, b) — наименьшее неотрицательное целое число n, для которого НОД(n3 + b, (n + a)3 + b) имеет наибольшее возможное значение.Например, G(1, 1) = 5, так как НОД(n3 + 1, (n + 1)3 + 1) достигает максимального значения 7 при n = 5 и имеет меньшие значения при 0 ≤ n < 5.Пусть H(m, n) = Σ G(a, b) для 1 ≤ a ≤ m, 1 ≤ b ≤ n.Известно, что H(5, 5) = 128878 и H(10, 10) = 32936544.Найдите H(18, 1900).

Прим. перев. На платформе задачи представлены на английском языке. Впрочем, на этом сайте можно посмотреть переводы для большинства из них.

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

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

Для любителей визуального отражения успехов на платформе предусмотрена система достижений.

Всё начинается с основ

Любое соревнование по программированию проверяет ваше умение использовать переменные, условные конструкции, циклы, структуры данных и прочие особенности языков программирования. Однако Проект Эйлер — ещё более тщательная проверка понимания и владения основами. Вам придётся комбинировать базовые инструменты разными способами для решения задач.

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

Развиваем шестое чувство

Есть причина, по которой каждая специальность в университете, связанная с Computer Science, содержит в своей программе изучение алгоритмов и структур данных, и по которой так много компаний проверяют алгоритмическое мышление при приёме на работу. По сути, написание хорошего кода заключается в поиске лучшего алгоритма для рассматриваемой логической задачи. Сложность заключается в том, чтобы понять, когда нужно тратить время на оптимизацию, а когда лучше обойтись простым решением.

Интуитивное решение, которое другим людям легче всего понять, часто является лучшим.

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

Улучшаем навыки программирования

Решение даже нескольких задач сотворит чудо с вашей уверенностью в используемом языке. Также это отличный способ освежить в памяти детали языка или изучить новый.

Учимся документировать и впечатляем работодателя

Если вы хотите добавить в своё портфолио что-нибудь впечатляющее, создайте репозиторий на GitHub и сохраняйте в него решения задач.

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

После написания решения проверьте, что имена переменных и функций понятны, уберите весь ненужный код и красиво всё отформатируйте.

Затем добавьте комментарии в код, объясняющие принятые вами решения. Умение писать хорошие комментарии — это навык. Помните, любой хороший разработчик поймёт, что делает код, поэтому комментарии должны объяснять, почему он делает именно так.

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

Смотрите также: Задачи для программистов
Следите за новыми постами
Следите за новыми постами по любимым темам
53К открытий54К показов