Biorąc pod uwagę pewną dodatnią liczbę całkowitą wygeneruj wszystkie odstępstwa obiektów.
Detale
- Wykolejenie to permutacja bez stałego punktu. (Oznacza to, że w każdym numerze wykreślenia nie może znajdować się w wpisie).
- Dane wyjściowe powinny składać się z odchyleń liczb (lub alternatywnie ).
- Alternatywnie zawsze możesz wydrukować odchylenia odpowiednio (lub ), ale musisz to określić.
- Dane wyjściowe muszą być deterministyczne, to znaczy za każdym razem, gdy program jest wywoływany z pewnymi danymi jako danymi wejściowymi, dane wyjściowe powinny być takie same (co oznacza, że kolejność odstępstw musi pozostać taka sama), a pełne dane wyjściowe muszą być wykonane w ciągu skończony czas za każdym razem (nie jest to wystarczające z prawdopodobieństwem 1).
- Możesz założyć, że
- Dla niektórych podanych możesz albo wygenerować wszystkie derangencje, albo alternatywnie możesz wziąć inną liczbę całkowitą która służy jako indeks i wydrukować -te derangement (w wybranej przez ciebie kolejności).
Przykłady
Pamiętaj, że kolejność odstępstw nie musi być taka sama, jak wymieniono tutaj:
n=2: (2,1)
n=3: (2,3,1),(3,1,2)
n=4: (2,1,4,3),(2,3,4,1),(2,4,1,3), (3,1,4,2),(3,4,1,2),(3,4,2,1), (4,1,2,3),(4,3,1,2),(4,3,2,1)
OEIS A000166 liczy liczbę wykroczeń .
Odpowiedzi:
Galaretka , 6 bajtów
Monadyczny link akceptujący dodatnią liczbę całkowitą, która daje listę list liczb całkowitych.
Wypróbuj online!
W jaki sposób?
źródło
Brachylog , 9 bajtów
Wypróbuj online!
Jest to generator, który wyprowadza jedno odstępstwo
[0, …, n-1]
danegon
.Jeśli
ᶠ - findall
zawińmy go w metapredykat, generator wygeneruje wszystkie możliwe generacje odstępstw.Wyjaśnienie
źródło
JavaScript (V8) , 85 bajtów
Funkcja rekurencyjna drukująca wszystkie odchylenia od 0.
Wypróbuj online!
Skomentował
źródło
Rubinowy , 55 bajtów
Wypróbuj online!
Generuje wszystkie odchylenia na podstawie 0
źródło
05AB1E , 9 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Wolfram Language (Mathematica) , 55 bajtów
Wypróbuj online!
źródło
Japt , 8 bajtów
W oparciu o 0
Wypróbuj (Stopka zwiększa wszystkie elementy w celu łatwiejszego porównania z przypadkami testowymi)
źródło
Python 2 , 102 bajty
Wypróbuj online!
Indeksowanie 0, lista krotek.
Nie-
itertools
-na rozwiązanie:Python 2 , 107 bajtów
Wypróbuj online!
Indeksowanie 0, wiersze list, pełny program.
Uwaga: To rozwiązanie, mimo że nie importuje
itertools
biblioteki, nie jest dużo dłuższe niż inne, które ją importuje, ponieważ większość tego miejsca buduje permutacje. Kontrola derangementu to tak naprawdę około 7 dodatkowych bajtów! Powodem jest to, że kontrola odbywa się w locie jako część budowy każdej permutacji. Nie dotyczy to drugiego rozwiązania, w którym należy sprawdzić, czy każda permutacja zwrócona przezitertools.permutations
funkcję jest w rzeczywistości wykroczeniem, i oczywiście samo mapowanie zajmuje dużo bajtów.źródło
MATL , 11 bajtów
Generuje to wszystkie odstępstwa w porządku leksykograficznym.
Wypróbuj online!
Objaśnienie z przykładem
Rozważ wejście
3
.źródło
Perl 5
-MList::Util=none -n
,10089 bajtówWypróbuj online!
źródło
Haskell , 58 bajtów
Wypróbuj online!
60 bajtów
Wypróbuj online!
źródło
Gaia , 10 bajtów
Wypróbuj online!
źródło
J , 26 bajtów
Wypróbuj online!
źródło
R ,
8180 bajtówWypróbuj online!
Zwraca wartość( n2)n) Możliwe wartości jak size-
list
zawierającą wszystkie odstępstwa. Wysoce nieefektywny, ponieważ generujen
kombinacji[1..n]
wielokrotnychn
razy, a następnie filtruje dla permutacji1:n%in%x
i zaburzeniami,1:n-x
.R + gtools , 62 bajty
Wypróbuj online!
Znacznie bardziej wydajne, zwraca miejsce, w
matrix
którym każdy wiersz jest wykroczeniem.źródło
Python 3.8 (wersja wstępna) , 96 bajtów
Wypróbuj online!
źródło
C ++ (gcc) ,
207196 bajtów-5 bajtów według pułapu cat -6 bajtów Roman Odaisky
Wypróbuj online!
źródło
std::copy
również, powierzają dzwoniącemu zapewnienie odpowiedniej przestrzeni dla danych wyjściowych.C ++ (gcc) , 133 bajty
Myślę, że to różni się wystarczająco od innych wniosków, aby zasługiwać na osobną odpowiedź. Wreszcie zastosowanie
index[array]
wewnętrznej składni!Wypróbuj online!
źródło
Haskell, 76 bajtów
źródło
Python 2 , 82 bajty
Wypróbuj online!
88 bajtów jako program:
Wypróbuj online!
93 bajty za pomocą itertools:
Wypróbuj online!
źródło
Perl 6 ,
4937 bajtówEdycja: Po kilku krokach z Philem H zmniejszyliśmy go do zaledwie 37 bajtów:
Wypróbuj online!
Używając
Whatever
na początku, możemy uniknąć nawiasów klamrowych (zapisujemy 2 znaki). Następnie użyjZ
metaoperatora, za pomocą-
którego bierze każdy element permutacji (np. 2,3,1) i odejmuje 0,1,2 w kolejności. Jeśli którakolwiek z nich ma wartość 0 (fałsz), wówczas połączenie nie powiedzie się.Oryginalne rozwiązanie to ( Wypróbuj online! )
źródło
Węgiel drzewny ,
4428 bajtówprzekreślone 44 jest nadal regularne 44
Wypróbuj online! Link jest do pełnej wersji kodu. Luźno oparty na nieetertowej odpowiedzi @ EricTheOutgolfer. Wyjaśnienie:
źródło
C (gcc) ,
187180 bajtówWypróbuj online!
źródło
Pyth , 12 bajtów
Wypróbuj online!
Filtr działa w ten sposób: jeśli jakikolwiek element jest w swoim pierwotnym miejscu, (indeks elementu) będzie wynosił 0, a cały produkt będzie wynosił 0, a zatem falsey.
źródło