Herausforderungsbeschreibung
Eine "Störung" einer Sequenz ist eine Permutation, bei der kein Element an seiner ursprünglichen Position erscheint. Zum Beispiel ECABD
ist eine Störung von ABCDE
, ist aber CBEDA
nicht:
ABCDE
| | <- B and D are in their orignal positions
CBEDA
Erzeugen Sie bei gegebener Sequenz eine zufällige Störung.
Anmerkungen
Sie können entweder eine Zeichenfolge als Eingabe oder ein Array / eine Liste von Elementen (Ganzzahlen, Zeichen, Objekte ...) verwenden.
Anstatt ein neues Objekt zurückzugeben, können Sie ein vorhandenes ändern, indem Sie seine Elemente austauschen
Jede Störung sollte die gleiche Wahrscheinlichkeit haben, erzeugt zu werden
Sie können davon ausgehen, dass die Sequenz mehr als ein Element enthält und keines mehr als einmal vorkommt
Antworten:
CJam , 14 Bytes
Probieren Sie es online!
Mische die Eingabe so lange, bis sie eine Störung darstellt.
Erläuterung
quelle
Gelee , 6 Bytes
Probieren Sie es online!
Erläuterung
Jonathan Allan hat ein Byte gespeichert.
quelle
Ẋ=³S$¿
speichert ein Byte.$
. Vielen Dank!Python, 85 Bytes
Ändert die übergebene Liste (von Meta und in der Frage zugelassen).
Probieren Sie es hier online aus!
quelle
def D(l):
mitl=input()
und dann die Vertiefung Räume in den folgenden Zeilen speichern (so Sie ein Programm statt eine Funktion haben). Hat aber nicht abgelehnt!ES6 (Javascript),
7169 BytesEingabe und Ausgabe sind Arrays und sollten mit allen Elementtypen (Zeichenfolgen, Zahlen usw.) funktionieren, sofern sie mit "==" verglichen werden können.
Golf gespielt
Prüfung
Interaktives Snippet
quelle
Perl 6 , 33 Bytes
Ein Lambda, das eine Liste von ganzen Zahlen oder Zeichen als Eingabe verwendet und eine neue Liste zurückgibt.
Wenn es Listen von beliebigen Werten unterstützen muss,
ne
müsste durch!eqv
(+2 Bytes) ersetzt werden.( Probieren Sie es online. )
Erläuterung:
{ }
: Definiert ein Lambda..pick(*)
: Erzeugt eine zufällige Mischung aus der Eingabeliste..pick(*) xx *
: Erzeugt eine langsame unendliche Folge solcher Mischvorgänge.(* Zne $_).all
: Ein Lambda, das zwei Listen (sein Argument*
und das Argument des äußeren Lambdas$_
) mit demne
Operator (negative Zeichenfolgengleichheit) komprimiert, was eine Liste von Booleschen Werten ergibt, und anschließend eineall
Junction erstellt, um sie in einen einzelnen Booleschen Zustand zu reduzieren .first PREDICATE, SEQUENCE
: Nimmt das erste Element aus unserer unendlichen Folge von Permutationen, das den "Derangement" -Test erfüllt.quelle
Brachylog ,
19181513 BytesProbieren Sie es online!
Erläuterung
quelle
Perl 6 , 45 Bytes
Versuch es
Input ist ein Array von allem.
Erweitert:
quelle
MATL, 7 Bytes
Dies ist eine Übersetzung meines Octave-Posts (und ähnlich wie bei einigen anderen Einsendungen hier). Ich habe gestern meinen ersten MATL-Beitrag gepostet (CNR-Riss). Ich denke, das ist nicht optimal, aber es ist das Beste, was ich bisher habe.
Um ehrlich zu sein, bin ich mir nicht ganz sicher, ob ich
t
dort gebraucht wird, aber es ist der einzige Weg, wie ich das zum Laufen bringen kann. Es wird verwendet, damit ich die Benutzereingaben (abgerufen mitG
) mit der zufälligen Permutation vergleichen kann. Ich würde denken, ich könnte die beiden ohne vergleichen, aber ...?Sowieso geht hier:
Probieren Sie es online!
quelle
t
oder kann ich es loswerden? Es hat Spaß gemacht, in MATL Golf zu spielen ... :)t
(oder gleichwertig mit einem anderenG
). Sie müssen für die nächste Iteration oder als Endergebnis etwas auf dem StapelEigentlich 13 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Oktave,
5655 BytesWir müssen verwenden,
input('')
da dies keine Funktion ist. Da ich die Eingabe auch als Zeichenfolge festlegen kann, können wir den dazugehörigen Trick verwendennnz(x)==numel(x)
.Erläuterung:
Vielen Dank an Luis, dass er bemerkt hat, dass die Eingabe eine Zeichenfolge sein kann. Daher könnte ich
nnz
anstelle dernumel
Speicherung von zwei Bytes verwenden.quelle
MATL, 13 Bytes
Dies ist eine gemeinsame Anstrengung von @LuisMendo und mir. Im Gegensatz zu vielen anderen Antworten ist diese hier deterministisch in dem Sinne, dass sie keine zufälligen Permutationen abtastet, bis sie eine Störung erhalten, sondern alle Störungen erzeugt und eine zufällig auswählt.
Probieren Sie es online!
Erläuterung
quelle
Pyth -
109 BytesDadurch wird die Eingabe weiter gemischt, während alle Zeichen den Zeichen an ihrem Index in der Eingabe entsprechen.
Probieren Sie es hier online aus .
quelle
Mathematica, 57 Bytes
Unbenannte Funktion, die eine Liste von Whatevern als Eingabe und Ausgabe einer Liste verwendet. Nachdem alle Permutationen
#
der Eingabe generiert wurdenx
, behalten wir nur die bei, für die die Menge#-x
der elementweisen Unterschiede kein a enthält0
. dann treffen wir eine (gleichmäßig) zufällige Auswahl aus dieser Menge.quelle
#/.x_:>NestWhile[RandomSample[#,Length@#]&,#,Not@FreeQ[#-x,0]&]&
offensichtlich schneller im Training für lange StreicherPHP, 85 Bytes
Kopiert das Zeichenfolgenargument in zwei Arrays und mischt eines davon, bis der Unterschied zwischen ihnen (der auch die Indizes der Elemente vergleicht) gleich dem anderen ist. Laufen Sie mit
-r
.quelle
R, 59 Bytes
Liest eine Liste von Elementen nach STDIN, nimmt die Länge der Liste und beginnt mit dem Abtasten von Bereichen von 1 bis zur Länge, bis eine gefunden wird, die keine Stellen mit der geordneten Liste teilt. Dann druckt diese Liste.
quelle
Wunder , 32 Bytes
Verwendung:
Erläuterung
Besser lesbar:
Rekursive Funktion
f
. Führt einen elementweisen Vergleich zwischenf
der Eingabeliste von und einer gemischten Version der Eingabeliste durch. Wenn der Vergleich gleiche Werte ergibt,f
wird er in der gemischten Liste aufgerufen. Andernfalls geben wir einfach die gemischte Liste zurück.quelle
Ruby, 67 Bytes
quelle
Oktave,
5453 BytesGenerieren Sie alle Permutationen
a
und wählen Sie zufällig eine Zeile aus, die kein gemeinsames Element mit hata
.Hinweis: Es ist aus Versehen das Gleiche wie @flawr MATL Antwort!
quelle
Clojure,
949079 Bytes-4 Bytes durch Ändern der Bedingung innerhalb der Reduktion auf
and
und Inliningdone?
.-11 Bytes durch Konvertieren der Reduktion in
some
.WOOT! Schlage PHP.
Brute-Force-Methode. Mischt die Liste, solange sie ungültig ist. Das wird schnell dumm, wenn man bedenkt, dass es sich um eine Brute-Force-Methode handelt, die Doppelversuche nicht verhindert. In weniger als einer Sekunde wurden 1000 Dearangments einer 1000 Elemente langen Liste gefunden.
Ungolfed:
quelle
Clojure, 56 Bytes
Beachten Sie, dass eine Zeichenfolge nicht gemischt werden kann, durch
seq
oder übergeben werden mussvec
.Ursprünglich habe ich versucht,
#(first(remove(fn[s]((set(map = % s))true))(iterate shuffle %)))
aberrecur
Ansatz ist in der Tat kürzer alsiterate
.Die Magie ist, dass
(set(map = % s))
entweder eine Menge von falsch, eine Menge von wahr oder eine Menge von wahr und falsch zurückgegeben wird. Dies kann als eine Funktion verwendet werden, wenn es enthält,true
dann ist die Antworttrue
, sonst falschnil
.=
ist glücklich, zwei Eingabeargumente zu nehmen, keine Notwendigkeit, es mit etwas zu umbrechen.Vielleicht gibt es noch einen kürzeren Weg, um zu überprüfen, ob einer der Werte wahr ist?
quelle
APL, 11 Bytes.
Mit der Zeichenfolge im richtigen Argument:
⍵[⍋(⍴⍵)?⍴⍵]
Erläuterung
ρ⍵
Ruft die Länge (oder Form) des richtigen Arguments ab.?
gibt ein zufälliges Array(⍴⍵)
dieser Zahlen zurück.⍋
Gibt die Reihenfolge zurück, um sicherzustellen, dass keine Duplikate vorhanden sind.⍵[..]
Stellt die zufällige Auswahl der Zeichenfolge dar, die diesen Index verwendet.quelle
⍵
.