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

Если вы изучаете Python, чему посвящен этот блог, вы найдете огромное количество материалов, которые помогут вам развить свои навыки. Однако Python ни в коем случае не является единственным доступным языком. Например, вы можете использовать HackerRank для практики.

  • C, C++, Java, C#, Python, PHP, Ruby, Go и Swift
  • базы данных/SQL
  • машинное обучение
  • регулярное выражение
  • остальные API

и больше.

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

Вот некоторые из причин, по которым люди любят или ненавидят HackerRank:

Причины, по которым люди любят HackerRank

  • Он дает объективную обратную связь об уровне ваших навыков в решении определенных типов проблем.
  • Это дает возможность развить свои навыки в нескольких областях программирования
  • Сообщество и обсуждение различных подходов и взглядов на проблемы
  • Структурированное обучение с постепенно усложняющимися задачами
  • Развить навыки решения проблем
  • Наборы задач доступны для фокусировки на определенных навыках

Причины, по которым люди ненавидят HackerRank

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

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

Как решить задачу Python HackerRank

Давайте рассмотрим задание из Набора для подготовки к собеседованию, разминочные задания: Повторяющаяся строка. Большая часть решения этих задач состоит в том, чтобы понять, что вы должны делать, основываясь на описании проблемы. Это далеко не всегда легко, и вам, вероятно, придется выполнить несколько задач, чтобы добраться до точки, где описания проблем не заставят ваш мозг болеть. Вот снимок экрана с вызовом Repeated String Challenge. Не расстраивайтесь, если это выглядит запутанно — я объясню это дальше.

Ладно, это может показаться абракадаброй, так что позвольте мне упростить вам задачу. Идея состоит в том, что для такой строки, как abc, вам нужно вычислить, сколько раз буква a появится в строке, если ее повторять до тех пор, пока она не станет заданной длины.

Смущенный?

Скажем, у вас есть строка abc, и заданная длина равна 10. Полная строка станет abcabcabca (повторяя abc до тех пор, пока не будет 10 символов), а количество a в результирующей строке будет 4.

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

if __name__ == '__main__':
 fptr = open(os.environ['OUTPUT_PATH'], 'w')
s = input()
n = int(input())
result = repeatedString(s, n)
fptr.write(str(result) + '\n')
fptr.close()

Как работают тесты в испытаниях HackerRank

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

Иногда ваш код проходит некоторые тесты, но не все. Затем у вас есть возможность «купить» доступ к проваленным тестам с помощью «Hakos» — это виртуальные кредиты, заработанные за решение задач.

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

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

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

Первоначальная попытка выполнения задания HackerRank Repeated String — проблема с памятью

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

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

Вот моя первая попытка решить задачу HackerRank Repeated String.

def repeatedString(s, n):
 long_string = s * (n // len(s))
 num_extra_chars = n - len(long_string)
 long_string += s[:num_extra_chars]
 return long_string.count("a")

Примечание. s[:num_extra_chars] означает "разрезать строку от начала до позиции num_extra_chars".

Вы видите, о чем я думал? Я создал полную версию повторяющейся строки в надежде подсчитать количество as. К сожалению, в некоторых тестах использовалось очень большое значение n, что означало нехватку доступной памяти. Мне пришлось пересмотреть свой подход.

Повторная разминка струн

Вот мое рабочее решение для повторяющейся разминки строк HackerRank Challenge в Python:

def repeatedString(s, n):    
 repeating_section_length = len(s)
 full_repetitions = n // repeating_section_length
 partial_result = s.count("a") * full_repetitions
 num_extra_chars = s[: n % repeating_section_length].count("a")
 return partial_result + num_extra_chars

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

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

Удачных вычислений!

Первоначально опубликовано на https://compucademy.net.