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

Некоторые из вас могут использовать такие онлайн-сервисы, как LeetCode, CodeWars, Hacker Rank.







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

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



Что такое АтКодер?

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

Если вы принимаете участие в конкурсах, вы можете получить «оценку» и получить «цвет», соответствующий диапазону ставок. Если вы знакомы с codeforces, возможно, вы знакомы с цветовой системой.



В AtCoder вы можете использовать множество языков программирования.

  • C
  • C++
  • Python2, Python3, PyPy2, PyPy3
  • Рубин
  • Юля
  • Ява
  • JavaScript, TypeScript
  • Go
  • Ржавчина
  • Фортран
  • Баш

…и т.д.

Цветовая система на AtCoder

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



«AtCoder(競技プログラミング)の色・ランクと実力評価、問題例 - chokudaiのブログ
近頃「 AtCoder…



Кратко резюмируя,

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

На что похожи задачи на AtCoder?

Как я уже писал выше, вы можете получать удовольствие от решения проблем с кодированием с помощью AtCoder. Я представляю некоторые задачи, поставленные под сомнение на прошлом конкурсе.

Конкурс новичков AtCoder 153



проблема А

Сервал сражается с монстром.

здоровье монстра равно H.

За одну атаку Сервал может уменьшить здоровье монстра на A. Другого способа уменьшить здоровье монстра нет.

Сервал побеждает, когда здоровье монстра становится равным 0 или ниже.

Найдите количество атак, которые Сервал должен совершить, прежде чем победить.

проблема Б

Енот сражается с монстром.

здоровье монстра равно H.

Енот может использовать N видов специальных приемов. Использование i-го хода уменьшает здоровье монстра на Ai. Другого способа уменьшить здоровье монстра нет.

Енот побеждает, когда здоровье монстра становится равным 0 или ниже.

Если Енот может выиграть, не используя один и тот же ход дважды или более, выведите Yes; в противном случае выведите No.

проблема С

Фенек сражается с N монстрами.

Здоровье i-го монстра равно Hi.

Fennec может выполнять следующие два действия:

Атака: Фенек выбирает одного монстра. Здоровье этого монстра уменьшится на 1.

Специальный прием: Фенек выбирает одного монстра. Здоровье этого монстра станет равным 0.

Нет другого способа уменьшить здоровье монстров, кроме Атаки и Специального Приема.

Фенек побеждает, когда здоровье всех монстров становится равным 0 или ниже.

Найдите минимальное количество раз, которое Феннек нужно совершить Атаку (не считая Специального приема), прежде чем она выиграет, когда она сможет использовать Специальный прием не более K раз.

На самом деле в этом конкурсе есть задачи от А до F, но я привожу только часть задач от А до С. (Если вас интересуют подробности, нажмите на ссылку выше.) Вы можете заметить, что обстановка похожа на фэнтези или ролевую игру, поэтому вы можете почувствовать, что делаете часть игры.

Еще одним важным моментом является сложность этих задач. Проблема A очень проста, если вы можете справиться со стандартными операциями ввода-вывода. Если вы используете C++, ответ на эту проблему будет таким:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int H, A;
    cin >> H >> A;

    if (H % A == 0){
        cout << H / A << endl;
    } else {
        cout << H / A + 1 << endl;
    }
}

Так что не волнуйтесь, если у вас нет уверенности.

Вывод

В этом посте я познакомил вас с AtCoder, сервисом онлайн-конкурсов по программированию. На этом сайте вы можете наслаждаться кодированием и изучать алгоритмы, даже если вы не являетесь конкурентоспособным программистом.