HackerRank: циклическое вращение массива в Python

Итак, я на HackerRank, и ОСТОРОЖНО, СПОЙЛЕРЫ

Это заняло у меня около пяти минут.

На самом деле это не о том, как я решил проблему, хотя я кратко расскажу об этом.

Я спросил себя/google «сдвиг массива python вправо» и напомнил, что collections а также deque существует. Я использовал их раньше. В 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 Message
Runtime Error
Error (stderr)
Traceback (most recent call last):
  File "Solution.py", line 42, in <module>
    fptr.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)

Кажется, они хотели возвращаться ценность! Ага! Я тогда понял, что я сделал неправильно!

Смотрите, отладка проста 😄

Итак, я закомментировал оператор печати и составил список элементов для возврата с заданными параметрами, и БАМ! 100% по тестам.

Пару дней назад мой рейтинг на HackerRank поднялся с 900 000 до 600 000. Только что я поднялся до 544328.

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

Давным-давно у нас не было сверхбыстрого интернета, чтобы искать вещи, и разработчикам нужно было действительно знать все сверхэффективно или иметь возможность ссылаться на вещи в физических книгах.

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

Это отличается, скажем, от разработки полезности deque а также rotate самостоятельно. Но HackerRank не просил меня разрабатывать его с нуля. Они просто просят вас решить проблему.

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

Я думаю: если у вас есть возможность создавать инструменты самостоятельно, вы получаете зеленый свет на использование готовых инструментов. Часто проблема для меня заключается в том, «какие инструменты использовать?», но до сих пор это был Python.

И, ну, технически, Google тоже.


Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *