Jako informatycy prawdopodobnie wszyscy znacie podstawowe operacje na listach pop i push . Są to proste operacje, które modyfikują listę elementów. Czy słyszałeś jednak o flopie operacji ? (jak w flip- flopie )? To całkiem proste. Biorąc pod uwagę liczbę n , odwróć pierwsze n elementów listy. Oto przykład:
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a.flop(4)
[4, 3, 2, 1, 5, 6, 7, 8, 9, 10]
Fajną rzeczą w operacji flop jest to, że możesz jej używać do robienia fajnych rzeczy na liście, takich jak sortowanie . Z flopami zrobimy coś podobnego:
Biorąc pod uwagę listę liczb całkowitych, „Neighbor it”. Innymi słowy, posortuj go tak, aby każdy zduplikowany element pojawiał się kolejno.
Można to zrobić za pomocą klap! Na przykład weź następującą listę:
>>> 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]
To prowadzi nas do zdefiniowania dzisiejszego wyzwania:
Biorąc pod uwagę listę liczb całkowitych, wypisz dowolny zestaw klap, które spowodują, że lista będzie sąsiadować.
Korzystając z ostatniej listy jako przykładu, powinieneś wypisać:
4
3
6
ponieważ wyrzucenie listy o 4, następnie o 3, a następnie o 6 spowoduje wyświetlenie listy sąsiadów. Pamiętaj, że nie musisz drukować najkrótszej możliwej listy klap sąsiadujących z listą. Jeśli wydrukowałeś:
4
4
4
3
1
1
6
2
2
zamiast tego nadal byłby to prawidłowy wynik. Jednak nigdy nie można wypisać liczby większej niż długość listy. Wynika to z faktu, że w przypadku listy a = [1, 2, 3]
dzwonienie a.flop(4)
jest bezsensowne.
Oto kilka przykładów:
#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]
Należy pamiętać, że w każdym z tych przykładów podany wynik to tylko jeden potencjalny prawidłowy wynik. Jak powiedziałem wcześniej, każdy zestaw flopów, który sąsiaduje z podaną listą, jest prawidłowym wyjściem . Możesz użyć tego skryptu Pythona, aby sprawdzić, czy dana lista klap poprawnie sąsiaduje z listą.
Możesz pobierać dane wejściowe i wyjściowe w dowolnym rozsądnym formacie. Na przykład poprawne są argumenty funkcji / wartość zwracana, STDIN / STDOUT, odczyt / zapis pliku itp. Jak zwykle jest to gra w golfa , więc stwórz możliwie najkrótszy program i baw się dobrze! :)