Ich muss aufhören, an lustige Namen zu denken
Ihre Aufgabe ist es, so viele Snippets (Programme mit eingebauter Ein- und Ausgabe), Funktionen oder vollständige Programme zu erstellen, die die Version von Ganzzahl-Arrays in Ihrer Sprache in aufsteigender Reihenfolge sortieren. Für jedes Programm sind Sie jedoch nur berechtigt Verwenden der Zeichen in ASCII (oder der Codepage Ihrer Sprache, wenn diese direkt als nicht ASCII angegeben ist), die in den vorherigen Programmen nicht verwendet wurden.
Dies ist eine Beispielantwort (separate Programme, die durch Zeilenumbrüche getrennt sind):
Derp
ASdFGHJKLAAA
qwEEERtyRty
In dieser (fiktiven Sprache), meine erste Antwort ist Derp
, die aufgebraucht D
, e
, r
und p
. Im zweiten Programm darf ich diese Zeichen nicht mehr verwenden, aber ich kann so viele Zeichen wiederverwenden, wie ich möchte. Dasselbe gilt für das dritte Programm und so weiter.
Jedes Programm muss ein Array von Ganzzahlen haben, also so etwas wie dieses (gültige Eingabe- / Ausgabestile finden Sie in den Eingabe- / Ausgabebeispielen):
[3 4 -2 5 7 196 -44 -2]
Und es muss die Elemente im Array in aufsteigender Reihenfolge als Array ausgeben:
[-44 -2 -2 3 4 5 7 196]
Ihre Punktzahl ist die Gesamtzahl der Einsendungen. Bei einem Gleichstand gewinnt der niedrigste Bytecount (die geringste Anzahl von Bytes in Ihrem Code)!
Regeln für Programme:
- Alle Einsendungen müssen korrekt in einer Sprachversion laufen (so
Python 2 != Python 3
). - Ihre Einsendungen können Ausschnitte, Funktionen oder vollständige Programme sein. Du darfst sie sogar mischen und anpassen - du musst jedoch sagen, welche welche ist und Links zu funktionierenden Einsendungen bereitstellen.
- Bitte stellen Sie nach Möglichkeit Online-Links zu allen Lösungen zur Verfügung.
- Bei allen Einsendungen muss ein Array (oder eine mit einem beliebigen Zeichen begrenzte Zeichenfolge) als Eingabe verwendet und das Array sortiert (in der
{any character}
Arrayform Ihrer Sprache oder als durch -begrenzte Zeichenfolge) ausgegeben werden. - Sie dürfen keine Zeichen außerhalb von ASCII (oder der Codepage Ihrer Sprache) verwenden.
Dies sind beispielsweise gültige Ein- / Ausgaben:
[1 2 3 4] (Clojure style arrays)
[1, 2, 3, 4] (Python style arrays)
1 2 3 4 5 (Space-delimited - separated by spaces)
1#2#3#4#5 ("#"-delimited - separated by "#" characters)
1\n2\n3\n4\n (newline-delimited)
Angaben zur Eingabe:
- Es wird garantiert, dass das Array nur Ganzzahlen enthält. Es kann jedoch negative Zahlen geben und Zahlen können sich unbegrenzt wiederholen.
quelle
Antworten:
Jelly , 10 Programme, 65 Bytes
Es gibt unvermeidliche Überschneidungen mit der Antwort von @ Lynn's Jelly . Credits für die bogosort Idee gehen an sie.
Probieren Sie es online! oder überprüfen Sie die Eindeutigkeit .
Wie sie arbeiten
quelle
Gelee, 8 Programme
Das letzte Programm ist echt nervig ...
Wenn ich das entfernen
œṡ
von<;0œṡ0⁸ṁjµ/
, gibt es auch diese sonderbaren:²SNr²ZFœ&
. Hilfe wird geschätzt.quelle
Roots → polynomial, polynomial → roots
ist genial!U
ist kostenlos05AB1E , Punktzahl = 6
05AB1E verwendet die CP-1252- Codierung.
Vielen Dank an Kevin Cruijssen für Programm 4.
Vielen Dank an Riley für die Inspiration für Programm 6.
Programm 1
Probieren Sie es online!
Programm 2
Probieren Sie es online!
Programm 3
Probieren Sie es online!
Programm 4
Probieren Sie es online!
Programm 5
Probieren Sie es online!
Programm 6
Probieren Sie es online!
quelle
ϧ
Kann für eine zusätzliche Punktzahl verwendet werden. Probieren Sie es hier aus.œ
Lösung gesucht , aber ich wusste nicht einmal vonß
:)€Ý逤
würde funktionieren, wenn¤
der Wert stattdessen geknackt würde, wenn er nur abgerufen würde.Brachylog , Score =
45Programm 1 - Zufallssortierung
Wir mischen und überprüfen, ob die umgekehrte Liste nicht aufsteigend ist. Wenn nicht, versuchen wir es erneut.
Programm 2 - Permutationssortierung
Gibt die erste Permutation aus, die nicht abnimmt.
Programm 3 - Eingebaut
Bestellung.
Programm 4 - Eingebaut
Bestellung durch Etikettierung. Da die Ganzzahlen in der Liste bereits festgelegt sind, gilt dies auch für
o
.Programm 5 - Min. Drucken
Hier ist eine Erklärung für diese Ungeheuerlichkeit der Natur:
quelle
RecursionError: maximum call stack size exceeded
JavaScript, Punktzahl
12Verdoppelte die Punktzahl dank @ETHproductions, die mich an String-Fluchten erinnerten
Snippet 1 (21 Bytes, Zeichen
\ ,-.=>289`Facehilnorstux
)Snippet 2 (9117 Bytes, Zeichen
(+)[!]
)Sie können beide Versionen in der Konsole Ihres Browsers testen. Die erste Version ist nur eine Funktion, die zweite Version ist ein Ausschnitt, dem Klammern und Argumente hinzugefügt werden müssen.
Beispiele
Wie?
Das erste Snippet ruft die Sortiermethode für das übergebene Array auf. Standardmäßig sortiert die Sortiermethode lexikografisch, was für Ganzzahlen (insbesondere für mehrstellige negative Zahlen) schlecht ist. Als solches müssen wir ihm einen Rückruf in Form einer Pfeilfunktion übergeben, die zwei Elemente nimmt und letztere von ersteren subtrahiert. Abhängig vom resultierenden Wert werden die beiden Elemente neu angeordnet: Wenn es kleiner als 0 ist,
a
wird vorb
, wenn es größer als 0 ist,a
wird nach angezeigtb
und wenn er 0 ist, werden beide Elemente nebeneinander angezeigt.Das zweite Snippet ist nichts anderes als eine codierte Version des ersten Snippets und nutzt die Tatsache, dass in JavaScript
object.function()
gleich istobject["function"]()
. Außerdem werden leere Arrays,!
Operatoren und Zahlenumwandlungen verwendet, um alle Arten von Zeichenfolgen zu generieren, in denen die erforderlichen Zeichen für den Funktionsnamen gefunden werden können. Dann werden die Klammern erneut verwendet, um das Zeichen an einem bestimmten Index in der Zeichenfolge abzurufen, und alle diese Zeichen werden verkettet, was den folgenden JavaScript-Code ergibt:[]["fill"]
gleich[].fill
, wessen["constructor"]
ist dasFunction
Objekt. Wir nennen das dann mit einem String (der beim Aufruf der Funktion ausgewertet werden soll), der die erste Funktion ist. Beachten Sie jedoch, dass das Argument durch ersetzt wurdethis
. Um den Wert vonthis
auf das Argument zu setzen, müssen wir eine Funktion für diese Funktion aufrufen, nämlich["call"]
. In herkömmlichem JavaScript würden Sie dies wie folgt schreiben:quelle
Function`return a=>a.sort\x28\x28a,b\x29=>a-b\x29`
zum Beispiel, aber ohne die Zeichen zu verwenden, die Sie bereits verwendet haben'
indem Sie z. B.'('
anstelle dessen, was JSF für dieses Zeichen generiert, einführen und ausführen. (Verwenden Sie auchf
undt
als Vars anstelle vona
undb
, wasb
buchstäblich ca. 3000 Zeichen kostet.)V , Punktzahl
3, 4Das war eine wirklich lustige Herausforderung! Zum Glück hat vim eine eingebaute "sort" -Funktion, sonst wäre dies im Grunde unmöglich. Leider benötigt V / vim ein Argument, um nach numerischen Werten zu sortieren, da es auf Strings basiert. Also rufe ich an
Nach Zahlenwert sortieren
n
,Nach Hexadezimalwert sortieren
x
undNach Gleitkommawert sortieren
f
Kleine Randnotiz: Wenn ich so etwas wie
<esc>
oder schreibe<C-r>
, ist das eigentlich ein Einzelbyte. Es stellt nicht druckbare Zeichen dar, und da V leider stark auf nicht druckbare Zeichen angewiesen ist, erleichtert diese Methode alles. Die TIO-Links haben das-v
Flag, wodurch der V-Interpreter diese als die Zeichen liest, die sie darstellen.Programm 1, 2 Bytes
Probieren Sie es online!
Dies ruft die V-spezifische Sortierfunktion auf .
Programm 2, 10 Bytes
Dies ruft direkt "sortieren" auf. Das einzig interessante daran ist, dass wir es aus dem
ex
Modus heraus tun , der ein seltsamer Modus ist, der den Texteditor 'ex' emuliert, Vs Ur-Ur-Großvater.vi
ist eine Abkürzung fürvisual
den Befehl zum Verlassen des Ex-Modus. Dies erfordert einen nachgestellten Zeilenumbruch.Probieren Sie es online!
Programm 3, 14 Bytes
Probieren Sie es online!
Okay, hier fangen die Erklärungen an, ein bisschen komisch zu werden. Wenn wir den Text aufbauen können
sor x
, können wir ihn löschen und mit in den aktuellen Befehl einfügen<C-r><register-name>
. Also werden wir es in Großbuchstaben eingeben.Programm 4, 19 Bytes
Probieren Sie es online!
Und hier fangen die Erklärungen an, sehr seltsam zu werden. Ähnlich wie beim letzten Mal bauen wir den Befehl im normalen Modus auf, damit wir verschiedene Tasten verwenden können.
quelle
CJam, 4 Punkte
Programm 1: Eingebaut
Programm 2: Eval'ed Built-in
36 ist der ASCII-Wert von
$
.Programm 3: Permutationssortierung
Programm 4: Mindestwerte
Erklärung dieser überirdischen Monstrosität:
quelle
(+
stattdessen verwenden,1m<
wenn Sie möchten.<
in diesem Snippet, also ist es wahrscheinlich besser, bei1m<
Japt , Score = 4
Programm 1
Probieren Sie es online!
Programm 2
Probieren Sie es online!
Programm 3
Probieren Sie es online!
Programm 4
Probieren Sie es online!
quelle
s)$.sort(...
, nicht sicher, ob das nützlich ist.O
und$
verwendet worden sind. Ich bin offen für Vorschläge, wenn Sie sich eine andere Sortierung vorstellen können! :)Oktave, 2 Punkte
Es ist schwer, mit Esolangs zu konkurrieren, aber hier ist es:
Ich bin beeindruckt, wenn jemand das schlägt.
unique
kann zum Sortieren von Werten verwendet werden, entfernt jedoch die Duplikate. Um die Duplikate einzufügen, müssten Klammern angegeben werden, die bei der Blasensortierung häufig verwendet werden. Du würdest auch brauchen@
, was auch gebraucht wird.Nummer 1:
Dies ist ganz einfach: Erstellen Sie eine anonyme Funktion, die der Variablen zugewiesen ist
ans
.Nennen Sie es auf diese Weise:
ans([-5, 3, 0, -2, 100])
. Es funktioniert nicht mit tio, aber mit octave-online .Nummer 2:
Dies ist einfach eine Implementierung der Blasensortierung, ohne die Zeichen zu verwenden
@sort
. Wir können dies nicht zu einer Funktion macheno
, und wir können es nicht benutzen,input
weilt
. Wir sind daher fest miteval
.eval(['a=inpu',116,'("");']);
a=input("");
ergibt :, mit dem wir unseren Eingabevektor eingeben können. Der Rest ist Blasensortieren ohnefor
odermod
. Beachten Sie, dass dies in einem Skript gespeichert und über die GUI / CLI aufgerufen werden muss. Sie können es wegen nicht kopieren-einfügeninput("")
(es wird den Rest des Codes als Eingabe verwenden, also kläglich scheitern).quelle
Haskell (Lambdabot), 3 Funktionen
Ich benutze die Lambdabot-Umgebung, um viele
import
Aussagen zu vermeiden . Sogarsort
Bedürfnisseimport Data.List
. lambdabot importiert standardmäßig eine Reihe von Modulen. Neben den Vermisstenimports
, ist es Standard-Haskell-Code nach unseren Regeln.Probieren Sie es online! .
Funktion 1
Die Bibliotheksfunktion von
Data.List
. Hier gibt es nicht viel zu sagen.Funktion 2
Funktion
v
implementiert eine Einfügesortierung.Ich benutze Pattern Guards, um
()
Parameter zu vermeiden . Vergleichen Sievv v|vvv:vvvv<-v=...
mitvv(vvv:vvvv)=...
.Die
vv
Funktion in der ersten Zeile ist eine Hilfsfunktion zum Erstellen der leeren Liste. Damit muss ich keine[]
leeren Listen schreiben. Besser lesbar:(==:)
ist Einfügen, wodurch ein Element in eine sortierte Liste eingefügt wird, sodass die resultierende Liste weiterhin sortiert ist. Besser lesbar:(=:)
ist zu reduzieren. Besser lesbar:Und zum Schluss,
v
was die Eingabeliste reduziert, die auf Folgendes verweist[]
:Funktion 3
sort
von Funktion 1 macht die meisten der Listen-Walking - Funktionen (fold
,scan
,until
) nicht verfügbar. Rekursionsanforderungen,=
die in Funktion 2 verwendet werden. Die einzige verbleibende Option ist die Verwendung des Fixpunktkombinatorsfix
. Ich habe angefangen mitdas ist eine auswahlsorte. Wenn Sie es auf Punktfrei stellen (ich kann keine Lambdas verwenden
\f x ->...
, da dies von den-
Musterguraden in Funktion 2 verwendet wird), erhalten Sie Folgendes:Das Erstellen von Singleton-Listen aus einem Wert mit
return
ist verboten (dasselbe gilt fürpure
), daher muss ich meine eigene Funktion erstellen:\x -> map (\y -> x+0*y) [1]
oder ohne Punkteflip map[1].(.(0*)).(+)
. Ersetzenreturn
Ausbeutenquelle
MATL , 3 Programme
Programm 1
Dies verwendet nur die eingebaute Funktion mit impliziter Eingabe und Anzeige.
Probieren Sie es bei MATL online .
Programm 2
Dadurch werden so lange zufällige Permutationen der Eingaben generiert, bis alle aufeinander folgenden Differenzen des Ergebnisses nicht mehr negativ sind (dies ist , wie von bemerkt, eine falsche Reihenfolge) @cz angegeben ). Die Laufzeit ist nicht deterministisch und ihr Durchschnitt steigt mit der Eingabegröße sehr schnell an (d. H. 𝒪 ( n! ) Für ein Array der Größe n mit unterschiedlichen Einträgen).
Probieren Sie es bei MATL Online aus .
Programm 3
Dies ist eine Schleife, die das Minimum des Arrays berechnet, alle Elemente entfernt, die diesem Wert entsprechen, und mit dem Rest fortfährt. Dies erfolgt so oft wie die Eingabegröße. Wenn nicht alle Einträge in der Eingabe unterschiedlich sind, sind einige der Iterationen nutzlos (aber harmlos), da das Array bereits geleert wurde.
Probieren Sie es bei MATL online .
quelle
Pip , 4 Programme
Programm 1 - eingebaut
Snippet; nimmt Liste in an
x
.(
SN
für numerische Sortierung)Programm 2 - Permutationen filtern
Snippet; nimmt Liste in an
y
. Sehr langsam für Eingaben, die länger als ca. 7 Elemente sind.Programm 3 - Auswertung
Snippet; nimmt Liste in an
z
.Programm 4 - MergeSort
Anonyme Funktion; Aufruf mit Liste als Argument (wie
({...} [1 2])
oderf:{...} (f [1 2])
.Ungolfed:
quelle
PowerShell , 2
Probieren Sie es online!
Dies ist ein Snippet, das in (z. B.) PowerShell-Entsprechung einer REPL ausgeführt wird. Der TIO-Link zeigt die Verwendung an. Das
sort
ist ein Alias für dasSort-Object
Cmdlet.Probieren Sie es online!
Powershell - Befehle sind Groß- und Kleinschreibung, so dass wir verwenden können ,
sort
für eine undSORT
für den anderen. Das nimmt ein Eingabearray, sortiert es an Ort und Stelle und gibt es dann aus.quelle
Ruby, 2 Programme
Erstens - das Unkomplizierte:
Zweitens - der schwierige Teil:
quelle
J
Programm eins: 3 Bytes
wie in
/:~ 3,1,2,1
Ausgaben1 1 2 3
Probieren Sie es online!
HINWEIS: In J werden negative Zahlen mit _ not vorangestellt. Sie können also 4, _10,56, _333 usw. versuchen.
Programm zwei: 5 Bytes
quelle
Try it online
Links , was zu einer Webseite auf TIO, eine Seite in einer Antwort zu verbinden, dies zu tun:[displayed text](link)
.:
und~
in beiden vorkommen.PHP 7, 2 Programme
Beide Programme können mehr golfen werden.
Programm 1, 254 Bytes, Zeichen
! "$&+.01:;=>?[]adeginoprtv
Blase sortieren. Verwendet
goto
, um eine Schleife zu erstellen, wie es integrierte Schleifen erfordern()
.Programm 2, 155 Bytes, Zeichen
#%'(),-67ACEFINORTUYZ^_{|}~
IF(...){}
vermeidet die Verwendung von;
. Der Hauptcode wird mit XOR codiert, da$
er bereits im vorherigen Programm verwendet wurde. Der Code:quelle