Herausforderung:
Eingabe: Eine Liste eindeutiger positiver Ganzzahlen im Bereich .
Ausgabe: Eine Ganzzahl: Gibt an, wie oft die Liste gemischt wird . Für eine Liste bedeutet dies, dass die Liste in zwei Hälften aufgeteilt ist und diese Hälften verschachtelt sind (dh, ein [1,2,3,4,5,6,7,8,9,10]
einmaliges Mischen der Liste würde zu Riffle führen [1,6,2,7,3,8,4,9,5,10]
, was für diese Herausforderung die Eingabe [1,6,2,7,3,8,4,9,5,10]
zur Folge hätte 1
).
Herausforderungsregeln:
- Sie können davon ausgehen, dass die Liste nur positive Ganzzahlen im Bereich (oder wenn Sie sich für 0-indizierte Eingabelisten entscheiden).
- Sie können davon ausgehen, dass alle Eingabelisten entweder eine gültige Riffle-Shuffled-Liste oder eine sortierte Liste sind, die nicht gemischt wird (in diesem Fall ist die Ausgabe
0
). - Sie können davon ausgehen, dass die Eingabeliste mindestens drei Werte enthält.
Schritt für Schritt Beispiel:
Eingang: [1,3,5,7,9,2,4,6,8]
Das einmalige Entmischen wird zu:, [1,5,9,4,8,3,7,2,6]
weil jedes gerade 0-indizierte Element zuerst [1, ,5, ,9, ,4, ,8]
kommt und danach alle ungeraden 0-indizierten Elemente [ ,3, ,7, ,2, ,6, ]
.
Die Liste ist noch nicht bestellt, also fahren wir fort:
Das Entmischen der Liste wird wieder: [1,9,8,7,6,5,4,3,2]
Wieder wird: [1,8,6,4,2,9,7,5,3]
Dann: [1,6,2,7,3,8,4,9,5]
Und schließlich [1,2,3,4,5,6,7,8,9]
:, was eine geordnete Liste ist, also sind wir fertig mit dem Entmischen.
Wir haben das Original [1,3,5,7,9,2,4,6,8]
fünf Mal neu gemischt , um es zu erreichen [1,2,3,4,5,6,7,8,9]
, daher ist die Ausgabe 5
in diesem Fall.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
Input Output
[1,2,3] 0
[1,2,3,4,5] 0
[1,3,2] 1
[1,6,2,7,3,8,4,9,5,10] 1
[1,3,5,7,2,4,6] 2
[1,8,6,4,2,9,7,5,3,10] 2
[1,9,8,7,6,5,4,3,2,10] 3
[1,5,9,4,8,3,7,2,6,10] 4
[1,3,5,7,9,2,4,6,8] 5
[1,6,11,5,10,4,9,3,8,2,7] 6
[1,10,19,9,18,8,17,7,16,6,15,5,14,4,13,3,12,2,11,20] 10
[1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20] 17
[1,141,32,172,63,203,94,234,125,16,156,47,187,78,218,109,249,140,31,171,62,202,93,233,124,15,155,46,186,77,217,108,248,139,30,170,61,201,92,232,123,14,154,45,185,76,216,107,247,138,29,169,60,200,91,231,122,13,153,44,184,75,215,106,246,137,28,168,59,199,90,230,121,12,152,43,183,74,214,105,245,136,27,167,58,198,89,229,120,11,151,42,182,73,213,104,244,135,26,166,57,197,88,228,119,10,150,41,181,72,212,103,243,134,25,165,56,196,87,227,118,9,149,40,180,71,211,102,242,133,24,164,55,195,86,226,117,8,148,39,179,70,210,101,241,132,23,163,54,194,85,225,116,7,147,38,178,69,209,100,240,131,22,162,53,193,84,224,115,6,146,37,177,68,208,99,239,130,21,161,52,192,83,223,114,5,145,36,176,67,207,98,238,129,20,160,51,191,82,222,113,4,144,35,175,66,206,97,237,128,19,159,50,190,81,221,112,3,143,34,174,65,205,96,236,127,18,158,49,189,80,220,111,2,142,33,173,64,204,95,235,126,17,157,48,188,79,219,110,250]
45
quelle
[1,3,5,7,9,2,4,6,8]
ist von der Länge 9, aber ich werde vielleicht ein paar mehr für die Längen 7 und 11 hinzufügen. BEARBEITEN: Die Testfälle[1,3,5,7,2,4,6] = 2
(Länge 7) und[1,6,11,5,10,4,9,3,8,2,7] = 6
(Länge 11) wurden hinzugefügt . Hoffentlich hilft das.[1,6,2,7,3,8,4,9,5,10]
oder[6,1,7,2,8,3,9,4,10,5]
möglich sind. In meiner Herausforderung bedeutet dies, dass die oberste Karte immer die oberste Karte bleibt, was in der Tat ein kleiner Trick ist. Ich habe noch nie jemanden gesehen, der nur Riffle-Shuffles verwendet, um ein Kartenspiel zu mischen. Normalerweise verwenden sie auch andere Mischformen dazwischen. Wie auch immer, es ist zu spät, um die Herausforderung jetzt zu ändern. Aus diesem Grund bleibt die oberste Karte nach einem Riffle-Shuffle immer die oberste Karte.Antworten:
Gelee , 8 Bytes
Probieren Sie es online!
Wie?
quelle
JavaScript (ES6), 44 Byte
Kürzere Version von @nwellnhof vorgeschlagen
Erwartet ein Deck mit 1-indizierten Karten als Eingabe.
Probieren Sie es online!
Ausgehend von einem Deck[c0,…,cL−1] der Länge L definieren wir:
Und wir suchen nachn so dass cxn=2 .
JavaScript (ES6),
57 5250 BytesErwartet ein Deck mit 0-indizierten Karten als Eingabe.
Probieren Sie es online!
Wie?
Da JS keine native Unterstützung für das Extrahieren von Array-Slices mit benutzerdefinierten Schritten bietet, wäre die Simulation des gesamten Riffle-Shuffle wahrscheinlich recht kostspielig (aber um ehrlich zu sein, habe ich es nicht einmal versucht). Die Lösung kann jedoch auch durch einen Blick auf die 2. Karte und die Gesamtzahl der Karten im Stapel gefunden werden.
Bei einem Deck der LängeL sucht dieser Code nach n so dass:
woc2 die zweite Karte ist undk folgt definiert ist:
quelle
Python 2 , 39 Bytes
Probieren Sie es online!
-4 Dank an Jonathan Allan .
quelle
f=lambda x:2!=x[1]and-~f(x[::2]+x[1::2])
!=
kann sein-
. ;-)x[1]>2
ich denke nur)R ,
585545 BytesProbieren Sie es online!
Simuliert den Sortiervorgang. Die Eingabe ist 1-indiziert und gibt
FALSE
0 zurück.quelle
Perl 6 ,
3432 Bytes-2 Bytes dank Jo King
Probieren Sie es online!
Ähnlich wie bei Arnauld . Der Index der zweiten Karte nach n Mischen ist
2**n % k
mit k wie in Arnauld's Antwort definiert.quelle
APL (Dyalog Unicode) ,
35262322 Byte SBCSProbieren Sie es online!
Dank an Adám für die Hilfe, Erik der Outgolfer für -3 und ngn für -1.
Der TIO-Link enthält zwei Testfälle.
Erläuterung:
¹
quelle
∧/2≤/⍵
->⍵≡⍳≢⍵
Perl 6 ,
36 3432 Bytes-2 Bytes dank nwellnhof
Probieren Sie es online!
Reverse Riffle Shuffles, indem Sie nach dem Index Modulo 2 sortieren, bis die Liste sortiert ist. Anschließend wird die Länge der Sequenz zurückgegeben.
Es ist lustig, ich versuche normalerweise nicht die rekursive Methode für Perl 6, aber diesmal war sie kürzer als das Original.
Erläuterung:
quelle
05AB1E (Legacy) , 9 Byte
Probieren Sie es online!
Erläuterung
quelle
Å≠
, das diese Herausforderung inspiriert hat. :)Java (JDK) , 59 Byte
Probieren Sie es online!
Funktioniert zuverlässig nur für Arrays mit einer Größe von weniger als 31 oder für Lösungen mit weniger als 31 Iterationen. Eine allgemeinere Lösung finden Sie in der folgenden Lösung mit 63 Byte:
Probieren Sie es online!
Erläuterung
Bei einem Riffle ist die nächste Position das vorherige Modulo (eins mal zwei), entweder Länge, wenn es ungerade ist, oder Länge - 1, wenn es gerade ist.
Ich durchlaufe also alle Indizes mit dieser Formel, bis ich den Wert 2 im Array finde.
Credits
quelle
x.clone()
vonA.copyOf(x,l)
.J ,
2826 Bytes-2 Bytes danke an Jonah!
Probieren Sie es online!
Inspiriert von der APL-Lösung von Ven.
Erläuterung:
K (ngn / k) , 25 Bytes
Danke an ngn für den Rat und für seinen K-Dolmetscher!
Probieren Sie es online!
quelle
1#@}.(\:2|#\)^:(2<1{])^:a:
für 26 BytesAPL (NARS), Zeichen 49, Bytes 98
Warum in der tiefsten Schleife ein Algo verwenden, das nlog (n) sein sollte, wenn wir ein lineares n verwenden können? nur für ein paar Bytes mehr? [⍵≡⍵ [⍋⍵] O (nlog n) und die Konfrontation jedes Elements für see sind nach ∧ / ¯1 ↓ ⍵≤1⌽⍵ O (n)] geordnet:
quelle
Ruby , 42 Bytes
Probieren Sie es online!
Wie:
Suchen Sie nach Nummer 2 innerhalb des Arrays: Wenn es auf der zweiten Position ist, wurde das Deck nicht gemischt, andernfalls überprüfen Sie die Positionen, an denen aufeinanderfolgende Mischen es platzieren würden.
quelle
R ,
7072 BytesProbieren Sie es online!
Behandelt jetzt den Null-Shuffle-Fall.
quelle
C (GCC)
6463 Bytes-1 Byte vom Nwellnhof
Dies ist eine drastisch kürzere Antwort, basierend auf den Antworten von Arnauld und Olivier Grégoire. Ich lasse meine alte Lösung unten, da sie das etwas allgemeinere Problem von Decks mit nicht zusammenhängenden Karten löst.
Probieren Sie es online aus
C (GCC) 162 Bytes
Probieren Sie es online aus
quelle
R, 85 Bytes
Probieren Sie es online aus.
Erläuterung
Dumme Methode (Brute Force), viel weniger elegant, als der Karte Nr. 2 zu folgen.
Anstatt die Eingabe zu mischen
s
, beginnen wir mit einem sortierten Vektoru
, den wir schrittweise mischen, bis er mit identisch ists
. Dies gibt Warnungen (aber die Zufallszahlen sind immer noch korrekt) für ungerade Längen der Eingabe aus, da ein Vektor mit ungerader Länge in eine 2-Spalten-Matrix gefaltet wird. In diesem Fall wird in R der fehlende Datenpunkt durch Rückführung des ersten Eingabeelements gefüllt.Die Schleife wird niemals enden, wenn wir einen Vektor bereitstellen, der nicht unmischbar ist.
Nachtrag: Sie speichern ein Byte, wenn Sie stattdessen das Mischen aufheben. Anders als in der obigen Antwort ist es nicht erforderlich, mit zu transponieren
t()
, die Reihenfolge ist jedochbyrow=TRUE
der Grund, warum inT
angezeigt wirdmatrix()
.R 84 Bytes
Probieren Sie es online!
quelle
PowerShell ,
116 114 108 8478 Byte-24 Bytes dank Erik der Outgolfer ‚s Lösung .
-6 bytes dank mazzy .
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 62 Byte
Probieren Sie es online!
Erläuterung
Die Eingabeliste ist
a
. Es wird ungerührt und mit der sortierten Liste verglichen, bis sie übereinstimmen.quelle
Rot ,
877978 BytesProbieren Sie es online!
quelle
Perl 5
-pa
, 77 BytesProbieren Sie es online!
quelle
Pyth , 18 Bytes
Probieren Sie es online!
-2 danke an @Erik den Outgolfer.
Das Skript hat zwei Zeilen: Die erste definiert eine Funktion
y
, die zweite Zeile rufty
mit dem implizitenQ
(evaluierten stdin) Argument auf.¹
quelle
PowerShell ,
62717066 Byte+9 Bytes, wenn Testfälle mit einer geraden Anzahl von Elementen hinzugefügt werden.
-1 byte mit splatting.
-4 Bytes: Umhüllen Sie den Ausdruck mit
$i
,$j
in einen neuen Bereich.Probieren Sie es online!
quelle
Japt ,
13,1110 BytesNehmen Sie meinen glänzenden, neuen
, sehr in Arbeit befindlichenDolmetscher für eine Probefahrt mit.Probieren Sie es aus oder führen Sie alle Testfälle aus
quelle
Python 3, 40 Bytes
Probieren Sie es online!
Ich muss die Seite häufiger aktualisieren: Ich habe Erik the Outgolfer's Edit verpasst, der einen ähnlichen Trick macht =)
quelle