Автор оригинала: Robin Andrews.
HackerRank – это сайт, где вы можете улучшить свои навыки программирования на Python, освоить структуры данных и алгоритмы, а также выделиться среди потенциальных работодателей, решая задачи вместе с программистами со всего мира. Он также используется рекрутерами для оценки способностей потенциальных сотрудников.
Если вы изучаете Python, который является основным направлением этого блога, вы найдете огромное количество материала, который поможет вам развить свои навыки. Однако Python ни в коем случае не является единственным доступным языком. Например, вы можете использовать HackerRank для практики
- C, C++, Java, C#, Python, PHP, Ruby, Go и Swift
- базы данных/SQL
- машинное обучение
- регулярное выражение
- API-интерфейсы rest
и более.
Вокруг происходит что-то вроде Мармита, независимо от того, любят люди ХакеррАнка или ненавидят. (Если вы не живете в Великобритании, вы можете не получить эту ссылку – Мармит-это соленый дрожжевой экстракт, который некоторые люди находят вкусным, но который переворачивает желудки других.)
Вот некоторые из причин, по которым люди любят или ненавидят HackerRank:
Причины, по которым люди любят HackerRank
- Это дает объективную обратную связь о вашем уровне мастерства в решении конкретных типов проблем
- Это дает возможность развить свои навыки в нескольких областях программирования
- Сообщество и обсуждение различных подходов и взглядов на проблемы
- Структурированное обучение с постепенно усложняющимися задачами
- Развивайте свои навыки решения проблем
- Доступны наборы задач для фокусировки конкретных навыков
Причины, по которым люди ненавидят HackerRank
- Проблемы могут быть трудными для решения
- Описания иногда неясны или чрезмерно сложны
- Типы задач вполне могут не отражать типы задач, которые вы будете выполнять в процессе разработки
- Пользовательский интерфейс может сбивать с толку
- Рекомендации часто не используются, например, для именования аргументов функций
Остальная часть этой статьи предназначена для людей, которые хотят попробовать HackerRank. В нем я помогу демистифицировать сайт и помогу вам приступить к решению проблем.
Как решить проблему Python HackerRank
Давайте взглянем на вызов из набора для подготовки к собеседованию Задачи разминки: Повторная строка . Большая часть решения этих проблем заключается в том, чтобы понять, что вы должны делать, основываясь на описании проблемы. Это далеко не всегда легко, и вам, вероятно, придется выполнить несколько задач, чтобы добраться до точки, где описания проблем не причиняют боли вашему мозгу. Вот захват экрана с повторным вызовом строки. Не расстраивайтесь, если это выглядит запутанным – я объясню это дальше.
Хорошо, это может выглядеть как пустая болтовня, так что позвольте мне упростить для вас ситуацию. Идея заключается в том, что, учитывая строку , такую как abc
, вам нужно определить, сколько раз буква a
появится в строке, если она будет повторяться до тех пор, пока не достигнет заданной длины.
В замешательстве?
Допустим , у вас есть строка abc
, и заданная длина равна 10
. Полная строка станет abcabcabca
, (повторяя abc
, пока у нас не будет 10
символов), а число a
s в результирующей строке равно 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 challenges, – это тесты . Когда вы отправите свой код, он будет запущен с количеством различных входных данных и результатами по сравнению с ожидаемыми (правильными) результатами. Ваш код должен будет пройти все тесты, чтобы вы успешно выполнили задачу.
Иногда ваш код проходит некоторые тесты, но не все из них. Затем у вас есть возможность “купить” доступ к неудачным тестам с помощью “Хакос” – это виртуальные кредиты, заработанные при решении задач.
Вы можете запустить код с помощью собственного ввода, используя форму, показанную ниже.
Один полезный совет-когда вы думаете, что у вас есть рабочее решение, вставьте образец ввода, указанный в описании проблемы, чтобы увидеть, дает ли ваше решение ожидаемый результат. Это даст вам первоначальное представление о том, находится ли ваш код “в правильном поле”.
Вы можете получить сообщение об ошибке, которое полезно при отладке кода, а также вы можете использовать операторы print
для просмотра значений переменных во время выполнения кода, и выходные данные будут отображаться при его запуске…
Первоначальная попытка HackerRank Повторила вызов строки – Проблема с памятью
Предупреждение о спойлере: Попробуйте решить проблему самостоятельно, прежде чем читать дальше, чтобы извлечь максимальную пользу из этой статьи. Вот ссылка еще раз: Повторяющаяся строка .
Если вы очень новичок в программировании, вам, возможно, придется потратить немного времени в другом месте, чтобы пройти начальный уровень. Одна вещь, которая делает проблемы на HackerRank действительно сложными, заключается в том, что часто недостаточно просто написать правильное решение. Кроме того, вполне могут существовать ограничения с точки зрения скорости выполнения и требований к памяти. Именно здесь вам пригодятся ваши знания об алгоритмической эффективности , или, если у вас нет этих знаний, вы получите возможность погрузиться в эту увлекательную тему.
Вот моя первая попытка решить проблему повторяющихся строк HackerRank.
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 .
Можете ли вы понять, о чем я думал? Я создал полную версию повторяющейся строки в надежде затем подсчитать количество a
s. К сожалению, некоторые тесты включали очень большое значение для n
, что означало, что доступной памяти было недостаточно. Мне пришлось пересмотреть свой подход.
Повторный вызов на разминку струн
Вот мое рабочее решение проблемы повторного прогрева строк HackerRank в 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.
Счастливых вычислений!