Das Ziel dieses Code Golf ist es, ein Programm zu erstellen, das eine Liste von Strings (in aufsteigender Reihenfolge) sortiert, ohne eine eingebaute Sortiermethode zu verwenden (wie Array.Sort()
in .NET, sort()
in PHP, ...). Beachten Sie, dass diese Einschränkung die Verwendung einer integrierten Methode ausschließt, die ein Array in absteigender Reihenfolge sortiert und anschließend das Array umkehrt.
Ein paar Details:
Ihr Programm sollte zur Eingabe auffordern. Bei dieser Eingabe handelt es sich um eine Liste von Zeichenfolgen, die nur ASCII-Kleinbuchstaben enthalten
a-z
, die durch Kommas ohne Leerzeichen voneinander getrennt sind. Beispielsweise:code,sorting,hello,golf
Die Ausgabe sollte die angegebene Liste von Zeichenfolgen sein, jedoch in aufsteigender Reihenfolge sortiert und ohne Leerzeichen durch Kommas getrennt. Beispielsweise:
code,golf,hello,sorting
Ruby
765451 Zeichenquelle
x=gets.scan /\w+/
k (16 Zeichen)
Wahrscheinlich wird er dem Geist des Problems nicht wirklich gerecht. In k gibt es keinen eingebauten Sortieroperator .
<x
Gibt eine Liste der Indexe der Elemente in x in sortierter Reihenfolge zurück.quelle
SED, 135
Basierend auf meinem vorherigen Sortierungseintrag
quelle
Rubin, 99 Zeichen ( Gnomensorte )
Dies übertrifft meine Implementierung der Blasensortierung kaum:
Ruby,
110104101 Zeichen ( Blasensorte )Dies führt
list.length
Iterationen durch, da das Worst-Case-Szenariolist.length - 1
Iterationen erfordert und eines davon wirklich keine Rolle spielt und 2 Zeichen spart.Nur zum Spaß eine Quicksort-Version:
Ruby, 113 Zeichen ( Quicksort )
quelle
Haskell, 141
Zumindest ist es ... irgendwie effizient.
quelle
m=minimum
s[]=[]
s l=m l:(s$l\\[m l])
(Ersetzen Sie die Zeilen 2–4 durch diese Zeilen).init
scheint nicht notwendig zu sein, da es weder eine,
abschließende noch eine abschließende Zeile gibt.t s=let(a,b)=span(/=',')s in a:t(drop 1 b)
kann unter Verwendung eines Muster guard verkürzt werden, unter Verwendung(>',')
und der Raum zwischen dropping1 b
:t s|(a,b)<-span(>',')s=a:t(drop 1b)
.x#(y:r)|y<x=y:x#r;x#r=x:r
ist kürzer. Es kann direkt in verwendet werdent
und da es nicht verwendet wird(\\)
undintercalate","
durch ersetzt werden kanntail.((',':)=<<)
, kann der Import abgebrochen werden. Insgesamt 101 Bytes: Probieren Sie es online!vba, 165
quelle
Split
.c=","
und Aufrufenc
erhöht in diesem Fall die Byteanzahl und trägt 7 Bytes zur Byteanzahl bei, wobei das zweimalige Verwenden von "," 6 Bytes ergibt. Sie können Ihren Bytecode verringern, indem Sie Eingaben direkt vom Unteraufruf (sub q(s)
) übernehmen und davon ausgehen, dass s vom Typ variant \ string ist. Sie können , indem ein Byte mehr verlierenFor i=1 to
zufor i=1To
. Sie können 5 Bytes verlieren, indem SieDebug.Print Join...
zuDebug.?Join...
Scala, 122 Bytes
Als Einzeiler (88 Bytes):
(Es wird eine Liste sortieren, indem es einfach tut
list.permutations.fil...
)Als Programm (122 Bytes):
Eine längere Version, wenn Sie möchten, dass es von stdin liest.
Dadurch werden alle Permutationen der angegebenen Liste durchlaufen, bis eine sortierte Liste gefunden wird. Es ist nicht schnell, da es ungefähr 12 Sekunden dauert, um eine Liste mit 10 Elementen zu sortieren, und weit über eine Minute, um eine Liste mit 11 Elementen zu sortieren.
[Bearbeiten] Elemente müssen eindeutig sein oder
<
können durch ersetzt werden<=
. Tut mir auch leid für Nekro.quelle
Javascript 128
DEMO Geige .
Ich suche nach einem Weg, um zu beseitigen
b
.quelle
[]
um den Teil nach dem?
, um 2 Zeichen zu sparenSyntaxError: missing : in conditional expression
weil?:;
(die Kurzformif/else
) nur zwei Arten von Code zum Ausführen benötigen soll (dhtrue?b++:b--;
)[
,]
ist ein Hack, ich bin mir immer noch nicht sicher, warum es funktioniert, ich denke, es ist als leeres Array verstanden Deklaration, wie das Platzieren einer zufälligen Zeichenfolge oder Zahl als eigenständiger Befehl. Sie können sich aber trotzdem frei fühlen, Ihre Meinung zu verbessern.?:
Operator hat eine niedrigere Priorität als,
{
,}
und es hat nicht funktioniert - ich versteheSyntaxError: missing : after property id
. Klammern stehen dabei immer an erster Stelle. Ich möchte noch eine upvote ....PHP 83 Bytes
Eine O (n 3 ) -Implementierung einer Auswahlsortierung. Das
Ó
ist Zeichen 211; ein etwas invertiertes Komma.Beispielnutzung:
quelle
Python 3 (80 Zeichen)
Hier ist eine Variation der while-Anweisung, die gleich lang ist:
quelle
Mathematica
6656Einige andere Lösungen ohne das eingebaute Symbol
Ordering
:Bogosort:
8474Blasensortierung:
9383Eine andere Lösung so ineffizient wie Bogosort:
8272quelle
Python 3.5+, 73 Bytes
Dies lässt sich von Steven Rumbalskis Antwort inspirieren , verwendet jedoch das Listenverständnis anstelle einer while-Schleife. Die Anzahl der Iterationen ergibt sich aus der kopierten Liste
l
, weshalb zusätzliche Generalisierungen zum Entpacken und Python 3.5 erforderlich sindquelle
R
Bubble Sort:
122118 ZeichenBogosort: 100 Zeichen
quelle
Perl, 159
Dies hatte nie eine Chance zu gewinnen, aber ich habe beschlossen, es zu teilen, weil mir die Logik gefallen hat, auch wenn es ein Chaos ist :) Die Idee dahinter ist, jedes Wort in eine ganze Zahl umzuwandeln (gemacht mit der ord- Funktion), wir speichern die Zahl als Schlüssel in einem Hash und die Zeichenkette als Wert, und dann iterieren wir zunehmend durch alle ganzen Zahlen (1..10 ** 100 in diesem Fall) und auf diese Weise bekommen wir unsere Zeichenketten sortiert.
WARNUNG : Führen Sie diesen Code nicht auf Ihrem Computer aus, da er Billionen von ganzen Zahlen durchläuft. Wenn Sie es testen möchten, können Sie die obere Bereichsgrenze senken und nicht lange Zeichenfolgen eingeben. Wenn dies aus irgendeinem Grund gegen die Regeln verstößt, lass es mich wissen und ich werde den Eintrag löschen!
quelle
JS: 107 Zeichen - Bubble Sort
Ich habe mir die Antwort von @ tryingToGetProgrammingStraight angesehen und versucht, sie zu verbessern, habe sie aber letztendlich etwas anders implementiert.
quelle
Java, 134 Bytes
Eine Methode, die Gnome Sort implementiert.
quelle
Schnell, 101 Bytes
Ungolfed:
quelle
𝔼𝕊𝕄𝕚𝕟, 24 Zeichen / 30 Byte (nicht konkurrenzfähig)
Try it here (Firefox only).
Auswahl sortieren!
Erläuterung
Entfernt das Minimum rekursiv und verschiebt es von der Eingabe in ein anderes Array.
quelle
Ceylon (Bogosort), 119
Probieren Sie es online!
Ich fand die
permutations
Methode und landete bei Bogosort (eine nicht zufällige Variante).Formatiert und kommentiert:
Ohne das Formatieren und Parsen werden es nur 90 Bytes:
Probieren Sie es online!
quelle
Perl 5 , 77 Bytes
Probieren Sie es online!
Einfache Blasensorte.
quelle
ruby -plaF,
70 BytesO (n), wenn Sie so tun, als wäre die Größenänderung und Komprimierung eines Arrays kostenlos (es ist sehr unfrei).
Wir erzeugen ein tief und ungleichmäßig verschachteltes Array,
o
indem wir einen String mit den Bytes b 1 , b 2 ... b n an der Position o [b 1 ] [b 2 ] ... [b n ] in das Array einfügen. Das Ergebnis sieht so aus[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,["a,",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, [,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ["abc,"], ["abd,"], ["abe,"]], ["ac,"], ["ad,"]],, ["c,"]]
Dann machen wir es flach und geben es aus.
quelle
Tcl , 211 Bytes
Probieren Sie es online!
quelle