Как компьютерные ученые, вы, вероятно, все знакомы с основными операциями со списком pop и push . Это простые операции, которые изменяют список элементов. Тем не менее, вы когда-нибудь слышали об операционном флопе ? (как в flip- флоп )? Это довольно просто. Если задано число n , поменяйте местами первые n элементов списка. Вот пример:
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a.flop(4)
[4, 3, 2, 1, 5, 6, 7, 8, 9, 10]
Крутая вещь в операции флопа состоит в том, что вы можете использовать ее для создания некоторых интересных вещей в списке, таких как сортировка . Мы собираемся сделать что-то подобное с флопами:
Дан список целых чисел «Сосед это». Другими словами, сортируйте его так, чтобы каждый повторяющийся элемент появлялся последовательно.
Это можно сделать с помощью флопов! Например, возьмите следующий список:
>>> a = [3, 2, 1, 4, 3, 3, 2]
>>> a.flop(4)
[4, 1, 2, 3, 3, 3, 2]
>>> a.flop(3)
[2, 1, 4, 3, 3, 3, 2]
>>> a.flop(6)
[3, 3, 3, 4, 1, 2, 2]
Это приводит нас к определению сегодняшнего вызова:
Имея список целых чисел, выведите любой набор флопов, который приведет к соседству списка.
Используя последний список в качестве примера, вы должны вывести:
4
3
6
потому что смещение списка на 4, затем на 3, затем на 6 приведет к соседнему списку. Имейте в виду, что вам не нужно печатать кратчайший список флопов, который соседствует со списком. Если вы напечатали:
4
4
4
3
1
1
6
2
2
вместо этого это все равно будет действительный вывод. Однако вы можете никогда не вывести число, превышающее длину списка. Это потому, что для списка a = [1, 2, 3]
вызов не a.flop(4)
имеет смысла.
Вот некоторые примеры:
#Input:
[2, 6, 0, 3, 1, 5, 5, 0, 5, 1]
#Output
[3, 7, 8, 6, 9]
#Input
[1, 2]
#Output
<any list of integers under 3, including an empty list>
#Input
[2, 6, 0, 2, 1, 4, 5, 1, 3, 2, 1, 5, 6, 4, 4, 1, 4, 6, 6, 0]
#Output
[3, 19, 17, 7, 2, 4, 11, 15, 2, 7, 13, 4, 14, 2]
#Input
[1, 1, 1, 1, 2, 2, 2, -1, 4]
#Output
[]
#Input
[4, 4, 8, 8, 15, 16, 16, 23, 23, 42, 42, 15]
#Output
[12, 7]
Имейте в виду, что в каждом из этих примеров данный вывод является лишь одним потенциальным допустимым выводом. Как я уже говорил, любой набор флопов, который соседствует с данным списком, является допустимым выводом . Вы можете использовать этот скрипт на python, чтобы убедиться, что данный список флопов правильно соседствует со списком.
Вы можете принимать и выводить данные в любом разумном формате. Например, аргументы функции / возвращаемое значение, STDIN / STDOUT, чтение / запись файла и т. Д. Являются действительными. Как обычно, это код-гольф , так что составьте самую короткую программу, какую только сможете, и получайте удовольствие! :)