Die Frage
Erstellen Sie bei einem Satz von 9 Zahlen, m[]
die nur die Zahlen 1 bis 9 in zufälliger Reihenfolge enthalten, wobei keine zwei Zahlen gleich sind, ein Programm in einer beliebigen Sprache, das die Zahl in numerischer Reihenfolge neu anordnet (1, 2, 3, usw. usw.) durch nur das Umschalten von zwei nebeneinander liegenden Zahlen (dh 1, 3, 2 → 1, 2, 3).
Regeln
- Sie können das Set nur ändern, indem Sie zwei nebeneinander liegende Nummern wechseln
- Die Endnummern (1 bis 9 in der Reihenfolge) sollten in enthalten sein
m[]
- Sie können jede Sprache verwenden, die Sie möchten
- Die Antwort mit der geringsten Anzahl von Bytes gewinnt
Bearbeiten:
Ihr Code muss die Ausgabe nicht drucken, aber das neu angeordnete Array muss sich in befinden m[]
.
code-golf
array-manipulation
sorting
Miau Mix
quelle
quelle
Antworten:
CJam, 15 Bytes
Wie es funktioniert:
Probieren Sie es hier online aus
quelle
Mathematica, 38 Bytes
Dies ist eine unbenannte Funktion, die ein Array verwendet, das eine Ersetzungsregel anwendet, bis das Muster nicht mehr gefunden werden kann. Das Muster ist eine Liste , die zwei aufeinander folgende Elemente hat
b
undc
wob > c
, und die Regel , sagt der tauschenb
undc
aber ansonsten lassen Sie das Array unangetastet.Es gibt hier viel syntaktischen Zucker, aber der Code ist tatsächlich sehr gut lesbar, wenn Sie ein bisschen Mathematica kennen:
quelle
Python 3, 72 Bytes
Der Bogosort-Ansatz (auch bekannt als dumme Sortierung): Tauschen Sie benachbarte Elemente nach dem Zufallsprinzip aus, bis das Array sortiert wird. Läuft normalerweise unter einer Sekunde.
2 Bytes dank @xnor.
quelle
Python 2, 45
Durchläuft die Liste und sortiert aufeinanderfolgende Elementpaare. Der Index
i
durchläuft0,1,2,3,4,5,6,7
acht Mal, wodurch garantiert wird, dass alle Elemente durchblasen und die Liste sortiert wird.quelle
Pyth, 13 - 15 Bytes
Lösung, die den angeforderten Austausch durchführt und keine Ausgabe erzeugt:
Lösung, die den angeforderten Austausch durchführt und bei jedem Schritt den Zwischenzustand der Liste ausgibt:
Lösung, die den angeforderten Austausch durchführt und den endgültigen Status der Liste druckt:
Demonstration der mittleren Lösung oben.
Die Methode zum Austauschen benachbarter Werte stammt aus der Antwort von @ Jakube.
Das Programm verwendet
#
die Schleife bis zur Fehleranweisung, um ein benachbartes Paar falsch geordneter Elemente auszutauschen, bis kein solches Paar mehr vorhanden ist. An diesem Punkt löst dieh
Kopffunktion einen Fehler aus und beendet das Programm.quelle
Retina ,
9593 BytesNicht besonders wettbewerbsfähig (und wahrscheinlich immer noch golffähig), aber los geht's ...
Wo
<empty>
sollte eine leere Zeile sein.Da alle Zahlen einstellig sind, wird nur eine Zeichenfolge mit allen 9 Ziffern als Eingabe erwartet und
123456789
nach erfolgreicher Sortierung gedruckt . Jede Stufe führt einen einzelnen Tausch durch und das)1`
zeigt an, dass alle bis auf die letzte Stufe wiederholt werden sollten, bis sich das Ergebnis nicht mehr ändert.Die leere Stufe am Ende ist notwendig, da wir sonst jedes Mal, wenn die
98
Stufe verarbeitet wird , Zwischenergebnisse erhalten würden .Hier sind alle Zwischenergebnisse (wann immer sie sich ändern) für einen Beispiellauf:
(Ich habe dies durch Hinzufügen der
:
Option zu jeder Stufe erhalten und aufeinanderfolgende Duplikate manuell entfernt.)quelle
Pyth, 17 Bytes
Das Wechseln von Elementen in einer Liste ist in Pyth sehr teuer. Hier ist also eine unterhaltsame Lösung, die die Regeln ein wenig erweitert. Es ist wahrscheinlich nicht gültig.
Probieren Sie es online aus: Pyth Compiler / Executor
Erläuterung
Zuallererst ist die zeitliche Komplexität meines Codes
O(n^3)
. Dies ist jedoch nicht der interessante Teil. Die Frage sagt nichts über die Komplexität aus.Der entscheidende Teil ist, wie ich zwei Elemente in der Liste wechsle. Angenommen, ich möchte die Elemente
m[3]
und wechselnm[4]
. Ich kümmere mich nicht um die Indizes3
und4
überhaupt. Ich erstelle einfach eine zweite Liste, die jedes Element, das gleich ist,m[3]
durch die Zahlm[4]
und jede Zahl, die gleichm[4]
dem Wert ist, ersetztm[3]
. Da die Liste keine Duplikate enthält, wird das Umschalten dieser beiden Werte simuliert. Wenn es Duplikate wie in der Eingabe[1, 3, 2, 2]
gäbe, wäre die Ausgabe[1, 2, 3, 3]
. Und wenn Sie die Eingabe geben[1, 2, 1]
, würde sie in einer Endlosschleife enden. Ich erstelle die zweite Liste nicht explizit, sie ist nur ein Teil von Pyths Implementierung der Übersetzungsmethode. Wenn Sie die aktuellen Listen ausdrucken ( siehe hier) gibt es die richtigen Werte, die Sie erwarten würden.quelle
JavaScript (ES6) 56
Eine rekursive Funktion, die die angegebene Liste neu anordnet.
Anmerkungen
In JS gilt für jeden numerischen Wert v: v> undefined == false, v <undefined == false. Das Überschreiten der Array-Grenzen ist also kein Problem, wenn wir den richtigen Vergleich verwenden
Wenn das Array endlich sortiert ist, gibt die Funktion in 'some' false zurück und die Rekursion endet
Der im Falle eines Swaps zurückgegebene Wert ist ein Array mit 2 Elementen, und sein Wert ist immer "wahr". Dies funktioniert auch dann, wenn ein oder mehrere Array-Elemente 0 sind
Tatsächlich funktioniert die Funktion mit jeder numerischen Eingabe, nicht nur mit einzelnen und nicht wiederholten Ziffern. Es wurde keine Möglichkeit gefunden, diese OP-Einschränkung zu nutzen.
Test mit Snippet (in Firefox) - Die Snippet-Version gibt bei jedem Schritt die aktuellen Listenwerte aus.
quelle
Javascript ( ES6 ),
666153 BytesDank der neuen Regel kann ich noch weiter reduzieren :)
Kommentiert
quelle
C, 183
Es wird noch nicht gespielt, außer Variablennamen.
quelle
Haskell, 59 Bytes
Die Funktion
s
setzt ein Elemente
vor oder an die zweite Stelle einer Liste, je nachdem, ob es kleiner oder größer als das erste Element der Liste ist. Durch das Einklappens
in die Eingabeliste wird das kleinste Element nach vorne gesprudelt. Ich falte in eine Liste mit einer Single,9
die ich sofort danach entferneinit
, damit ich nicht nach leeren Listen suchen musss
.iterate
wiederholt den Faltvorgang für immer und erstellt eine Liste mit Zwischenergebnissen. Das Endergebnis ist das 9. Element dieser Liste.quelle
Perl, 68 Bytes
Ungolfed Code
quelle