Так что я на HackeRrank, и ОСТОРОЖНО, СПОЙЛЕРЫ
https://www.hackerrank.com/challenges/circular-array-rotation/problem?utm_campaign=challenge-recommendation&utm_medium=email&utm_source=24-hour-campaign
Это взяло у меня около пяти минут.
Это не совсем о том, как я решил проблему, хотя я кратко расскажу об этом.
https://stackoverflow.com/questions/2150108/efficient-way-to-shift-a-list-in-python
Я спросил себя/Google “Python Array Shift справа” и напомнил, что коллекции
и Дейко
существует. Я использовал их раньше. Python имеет так много классных инструментов, о которых я забываю все время. Вы не можете наказать кого-то за то, что не помню каждую вещь.
def circularArrayRotation(a, k, queries): from collections import deque items = deque(a) items.rotate(k) ret_list = [] for q in queries: #print(items[q]) ret_list.append(items[q]) return ret_list
Теперь, что-то интересное, что вы отметите, что я прокомментировал оператор печати в цикле.
Когда я впервые написал функцию, она выглядела так:
def circularArrayRotation(a, k, queries): from collections import deque items = deque(a) items.rotate(k) ret_list = [] for q in queries: print(items[q])
Теперь это именно то, к которому вызывается описание проблемы.
«Для каждого запроса напечатайте значение элемента при индексе вращающегося массива на новой строке».
Я думал, что сделал это, но тогда ухороженный компилятор Hackerrank Compiler/Tester
Compiler Message Runtime Error Error (stderr) Traceback (most recent call last): File "Solution.py", line 42, infptr.write('\n'.join(map(str, result))) TypeError: 'NoneType' object is not iterable Input (stdin) 3 2 3 1 2 3 0 1 2
Итак, я иду «хммм …» и проверил главную:
if __name__ == '__main__': fptr = open(os.environ['OUTPUT_PATH'], 'w') nkq = input().split() n = int(nkq[0]) k = int(nkq[1]) q = int(nkq[2]) a = list(map(int, input().rstrip().split())) queries = [] for _ in range(q): queries_item = int(input()) queries.append(queries_item) result = circularArrayRotation(a, k, queries) fptr.write('\n'.join(map(str, result))) fptr.write('\n') fptr.close()
Важная часть такова:
result = circularArrayRotation(a, k, queries)
Кажется, они хотели возвращение ценность! Ага! Я тогда понял, что я сделал не так!
Видите, отладки легко: D
Так Я прокомментировал оператор печати и построил список предметов для возврата данных параметров и BAM! 100% на тестах.
Пару ночью назад я пошел от как звание 900 000, чтобы заниматься 600 000 на HackeRrank. Только сейчас я переехал до 544328.
Честно говоря, всю эту дискуссию приносит вещь, которую я буду ярость/блог в ближайшее время, если кто-то не делает этого до меня, но в основном это в основном по поводу философских различий в стиле старых и новостных учреждений.
Давным-давно у нас не было Hyper-Fast Internet, чтобы посмотреть, и разработчики действительно должны были действительно знать все гипер-эффективно или иметь возможность ссылаться на вещи в физических книгах.
Если есть одна вещь, которую я вышел из государственной школы, именно то, как использовать индекс книги и найти ответы на вопросы или решения проблем.
Это отличается от, скажем, инженерии утилиты Дейко
и вращать
самостоятельно. Но, HackeRrank не просил меня инженерировать его с нуля. Они просто просят вас решить проблему.
Это изменяет возможность взглянуть на вещи? Вы действительно программисты, если вы полагаетесь на предварительно сделанные инструменты?
Я думаю: после того, как у вас есть возможность создавать инструменты самостоятельно, вы GreenLit, чтобы использовать предварительно сделанные инструменты. Часто проблема для меня – «какие инструменты использовать?», Но до сих пор Python был этим.
И, Ну, технически, гугл тоже.
Оригинал: “https://dev.to/therealdarkmage/hackerrank-circular-array-rotation-in-python-52e2”