Wenn eine positive ganze Zahl , werden alle Abweichungen von Objekten erzeugt.
Einzelheiten
- A derangement eine Permutation ohne Fixpunkt. (Dies bedeutet , in jeder Umnachtung Zahl nicht in dem seine - ten Eintrag).
- Die Ausgabe sollte aus Abweichungen der Zahlen (oder alternativ ) bestehen.
- Sie können alternativ immer Abweichungen von (bzw. ) drucken , müssen dies jedoch angeben.
- Die Ausgabe muss deterministisch sein, dh wenn das Programm mit einem bestimmten als Eingabe aufgerufen wird , sollte die Ausgabe dieselbe sein (was beinhaltet, dass die Reihenfolge der Abweichungen dieselbe bleiben muss) und die vollständige Ausgabe muss innerhalb von erfolgen jedes Mal eine endliche Menge an Zeit (es ist nicht ausreichend, dies mit Wahrscheinlichkeit 1 zu tun).
- Sie können davon ausgehen, dass
- Für ein bestimmtes Sie entweder alle Abweichungen generieren oder alternativ eine andere Ganzzahl als Index verwenden und die te Abweichung ausgeben (in der von Ihnen gewählten Reihenfolge).
Beispiele
Beachten Sie, dass die Reihenfolge der derangements nicht die gleiche sein muss wie hier aufgeführt:
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 zählt die Anzahl der Störungen.
code-golf
math
number
array-manipulation
permutations
fehlerhaft
quelle
quelle
Antworten:
Gelee , 6 Bytes
Ein monadischer Link, der eine positive Ganzzahl akzeptiert, die eine Liste von Ganzzahllisten liefert.
Probieren Sie es online!
Wie?
quelle
Brachylog , 9 Bytes
Probieren Sie es online!
Dies ist ein Generator, der eine Störung von
[0, …, n-1]
gegebenem ausgibtn
.Wenn wir es in ein
ᶠ - findall
Metapredikat einwickeln, erhalten wir alle möglichen Generationen von Störungen durch den Generator.Erläuterung
quelle
JavaScript (V8) , 85 Byte
Eine rekursive Funktion, die alle 0-basierten Abweichungen ausgibt.
Probieren Sie es online!
Kommentiert
quelle
Ruby , 55 Bytes
Probieren Sie es online!
Erzeugt alle 0-basierten Abweichungen
quelle
05AB1E , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Wolfram Language (Mathematica) , 55 Byte
Probieren Sie es online!
quelle
Japt , 8 Bytes
0-basiert
Probieren Sie es aus (Fußzeile erhöht alle Elemente, um den Vergleich mit den Testfällen zu erleichtern)
quelle
Python 2 , 102 Bytes
Probieren Sie es online!
0-basierte Indizierung, Liste der Tupel.
Nichtbasierte
itertools
Lösung:Python 2 , 107 Bytes
Probieren Sie es online!
0-basierte Indizierung, Listenzeilen, volles Programm.
Hinweis: Diese Lösung ist, obwohl sie die
itertools
Bibliothek nicht importiert , nicht viel länger als die andere, die sie importiert, da der Großteil der hier beschriebenen Lösung die Permutationen erstellt. Die Überprüfung der Störung ist wirklich ungefähr 7 zusätzliche Bytes! Der Grund ist, dass die Prüfung im laufenden Betrieb als Teil des Aufbaus jeder Permutation durchgeführt wird. Dies gilt nicht für die andere Lösung, bei der Sie überprüfen müssen, ob jede von deritertools.permutations
Funktion zurückgegebene Permutation tatsächlich eine Störung darstellt, und die Zuordnung selbst natürlich eine Menge Bytes benötigt.quelle
MATL , 11 Bytes
Dies erzeugt alle Störungen in lexikographischer Reihenfolge.
Probieren Sie es online!
Erklärung mit Beispiel
Betrachten Sie die Eingabe
3
.quelle
Perl 5
-MList::Util=none -n
,10089 BytesProbieren Sie es online!
quelle
Haskell , 58 Bytes
Probieren Sie es online!
60 Bytes
Probieren Sie es online!
quelle
Gaia , 10 Bytes
Probieren Sie es online!
quelle
J , 26 Bytes
Probieren Sie es online!
quelle
R ,
8180 BytesProbieren Sie es online!
Gibt ein zurück,( n2n) mögliche Werte wie die größen-
list
das alle Abweichungen enthält. Sehr ineffizient, wie es erzeugtn
Kombinationen von[1..n]
wiederholtenn
Mal, dann filtert für Permutationen1:n%in%x
und Störungen,1:n-x
.R + gtools , 62 Bytes
Probieren Sie es online!
Sehr viel effizienter, gibt eine zurück,
matrix
bei der jede Zeile eine Störung darstellt.quelle
Python 3.8 (Vorabversion) , 96 Byte
Probieren Sie es online!
quelle
C ++ (GCC) ,
207196 Bytes-5 Bytes von ceilingcat -6 Bytes von Roman Odaisky
Probieren Sie es online!
quelle
std::copy
dem Aufrufer ebenfalls anvertrauen, ausreichend Platz für die Ausgabe zur Verfügung zu stellen.C ++ (gcc) , 133 Bytes
Ich denke, dies hat sich von der anderen Vorlage so stark verändert, dass es eine separate Antwort verdient. Endlich eine Verwendung für
index[array]
Inside-Out-Syntax!Probieren Sie es online!
quelle
Haskell, 76 Bytes
quelle
Python 2 , 82 Bytes
Probieren Sie es online!
88 Bytes als Programm:
Probieren Sie es online!
93 Bytes mit itertools:
Probieren Sie es online!
quelle
Perl 6 ,
4937 BytesEdit: Nach einigem Hin und Her mit Phil H haben wir es auf nur 37 Bytes reduziert:
Probieren Sie es online!
Durch die Verwendung von
Whatever
am Anfang können wir die Klammern vermeiden (spart 2 Zeichen). Verwenden Sie als Nächstes denZ
Metaoperator, mit-
dem jedes Element einer Permutation (z. B. 2,3,1) in der angegebenen Reihenfolge subtrahiert wird. Wenn einer von ihnen 0 (falsch) ist, schlägt die all-Junction fehl.Ursprüngliche Lösung war ( Online ausprobieren! )
quelle
Holzkohle ,
4428 Bytesdurchgestrichen 44 ist immer noch regulär 44
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Lose basierend auf der Antwort von @ EricTheOutgolfers Nicht-Itertools. Erläuterung:
quelle
C (gcc) ,
187-180BytesProbieren Sie es online!
quelle
Pyth , 12 Bytes
Probieren Sie es online!
Der Filter funktioniert folgendermaßen: Wenn sich ein Element an seiner ursprünglichen Stelle befindet, ist (Element-Index) 0 und das gesamte Produkt ist 0 und daher falsch.
quelle