Guten Abend Golfer!
Ihre Herausforderung besteht darin, eine Reihe von Zahlen vollständig zu sortieren.
Eingang
Es werden genau 100 Ganzzahlen in Ihr Programm eingegeben. Ihr Programm akzeptiert die Eingabe entweder als Datei oder über stdin. Jede Ganzzahl wird durch ein Zeilenumbruchzeichen getrennt.
Diese 100 Ganzzahlen reichen von den minimalen bis zu den maximalen Werten einer vorzeichenbehafteten Ganzzahl in der von Ihnen gewählten Sprache.
Es gibt keine doppelten Werte. Die Werte können geordnet, ungeordnet oder teilweise geordnet sein - Ihr Programm sollte in der Lage sein, jeden Fall zu behandeln.
Ausgabe
Die Ausgabe muss jede der 100 Ganzzahlen sein, die vollständig unsortiert und jeweils durch ein Zeilenumbruchzeichen getrennt sind. Die Ausgabe kann über stdout oder in eine Datei erfolgen.
Völlig unsortiert bedeutet, dass keinem Wert ein Wert benachbart ist, zu dem er benachbart wäre, wenn die Liste vollständig in einer geordneten Reihenfolge sortiert wäre.
Ergebnis
1 Punkt pro Charakter und die niedrigste Punktzahl gewinnt. Es gibt einen Bonus von -100 für jede Lösung, die keine eingebauten oder Bibliotheks-Sortierfunktionen verwendet. Es gibt einen Bonus von -20 für alle Lösungen, die keine eingebauten Zufallszahlenfunktionen verwenden.
Ich habe versucht, diese Frage so vollständig wie möglich zu definieren. Wenn Sie Fragen haben, wenden Sie sich bitte. Wenn Sie Kommentare dazu haben, wie ich es beim nächsten Mal besser machen könnte, lassen Sie es mich bitte wissen.
Vordergrund!
quelle
Antworten:
GolfScript (Punktzahl 27 - 120 = -93)
Hinweis: Das
$
verweist auf ein Element auf dem Stapel. Es wird sortiert, aber mit einer manuell codierten Blasensortierung.Dank Howard für -90 => -92; und Ilmari, der -92 => -93 inspirierte.
quelle
$
- deshalb habe ich erwähnt, dass die$
im Programm nicht sortieren (es ist kontextabhängig). Der größte Teil des Programms (28 der 42 Zeichen) definiert die Funktion^
; Die erste Version, die die eingebaute Sortierung verwendete, bestand nur aus 14 Zeichen.2/{~p}%n*
.2/zip~+n*
und.);\+2%n*
mache den Trick auch für die gleiche Anzahl von Zeichen wie @ Howards Version. Leider habe ich es noch nicht geschafft, etwas kürzer zu finden.Python -26
(94-120): Neuer, roher Ansatz. Fügen Sie die niedrigsten Elemente in die neue Liste ein, um die Elemente zu sortieren, und wiederholen Sie sie dann:
Python -13
(107-120): Erster Ansatz: Entfernt vier niedrigste Elemente gleichzeitig und druckt diese vier in einer anderen Reihenfolge aus:
quelle
t=l=[]
undexec't+=[input()];'*100
würde Ihnen ein paar Zeichen sparenexec
Anweisung für mehr als eine Schleife verwenden.t=l=[]
t und l zeige ich auf dasselbe Objekt und es funktioniert nicht. Klammern überspringenexec
ist aber schön.t=t+[input()];
, um jedes Mal ein neues Objekt zu erstellen. Und Sie können sogar die Druckschleife in der exec - Anweisung tun:';i+=1;print l[i*3%100]'*100
.%3
Fügte auch etwas anderes Golfspielen wie das Entfernen und das Vermeiden der Wiederholung von hinzu100
.C: 11 (131-120)
Das Programm liest von stdin und führt eine einfache Einfügesortierung durch. Anschließend wird, wie bei vielen anderen Lösungen, die n-te zusammen mit der n + 50-ten Zahl gedruckt.
quelle
Mathematica
-56 44 4(95-120) = -25Bearbeiten :
Diese Version basiert weder auf integrierten Funktionen zum Sortieren von Listen noch auf Randomisierungsfunktionen.
quelle
Sort
nicht eine eingebaute Sortierfunktion?J, -63 (57-120) Zeichen
Da alle anderen den selbstgeschriebenen Weg gehen ...
Verwendet weder eine Zufallszahlenfunktion noch eine eingebaute Sortierung.
Verwendet eine einfache rekursive Auswahlsortierung, um die Eingabe zu sortieren.
quelle
Rubin 1,9, -59
(61-120)
Rekursion! Im Gegensatz zu meinen vorherigen Ruby-Versuchen sortiert dieser die Liste tatsächlich ungeachtet ihrer ursprünglichen Reihenfolge.
Bisherige Versuche
Niedlicher Einzeiler, der jetzt die eingebaute Sortierung verwendet, um richtig zu funktionieren:
Erster - Die letzten 4 Werte mussten nicht unbedingt sortiert werden:
quelle
Python 2: 90 Zeichen
fauler Versuch, aber nur für den Anfang
quelle
Python 48 = (148 - 100)
Habe dies nicht getestet, weil es nicht garantiert (oder wahrscheinlich) in einer angemessenen Zeitspanne ausgeführt werden kann, aber theoretisch in einer unendlichen Zeit funktionieren sollte.
quelle
x=map(input,['']*100)
[]
Zeichen, sondern nur eine einzelne Zeichenfolge.Python 27 (147 - 100 - 20)
Hinweis: Die Leerzeichen davor
if L[i]>...
sollten ein Tabulator sein, werden jedoch anscheinend als Leerzeichen in einem Codeblock angezeigt.quelle
R=range
könnten Sie 5 Zeichen speichern.a=map(input,['']*100)
Perl 5: 95-120 = -25 Zeichen
Zählen Sie die folgende Befehlszeile:
quelle
Rubin: -50 (70 Zeichen - 120)
Ich habe das Gleiche getan wie bei vielen anderen Antworten: Entfernen Sie das Maximum und das Minimum iterativ aus der Eingabeliste und hängen Sie sie an die Ausgabe an. Ich habe jedoch festgestellt, dass die Ausgabe falsch ist, wenn die 2 Zahlen auf beiden Seiten des Medians aufeinander folgen (da diese 2 aufeinander folgenden Zahlen am Ende der Ausgabe zusammen angezeigt werden). Um dies zu beheben, drehe ich die "unsortierte" Liste um 1 Element:
Oder um mit beliebig vielen Eingaben zu arbeiten (mit nur 4 weiteren Zeichen):
Hinweis: Einige Ruby-Antworten mit weniger Zeichen wurden bereits veröffentlicht, aber diese Lösungen haben das Median-Problem nicht behoben (und / oder eine sortierte Eingabeliste angenommen).
quelle
J 37-100 = -63
Verwendet keine Sortierung (obwohl Rang aufsteigend verwendet wird). Verwendet Zufallszahlen.
Erläuterung:
quelle
Brachylog , 22 Bytes - 120 = -98
Probieren Sie es online!
Die TIO-Verbindung hat nur eine Eingabe von acht statt von einhundert Ganzzahlen, da diese so schrecklich langsam ist, dass sie in 60 Sekunden nicht mehr verarbeitet werden kann. Der Grund dafür ist unter anderem, dass ich der Kürze halber, anstatt einen einfachen, aber normalen Sortieralgorithmus für den obligatorischen Bonus zu implementieren, das verwendet habe, was einem deterministischen Bogosort gleichkommt: Durchläuft
p≤₁
jede Permutation der Eingabe, bis sie einen findet Das ist nicht abnehmend. Ein größerer Grund wäre wahrscheinlich, dass es einen ähnlichen Grad an Brute Force verwendet, um die Ausgabe zu finden, und dass es jedes Mal die sortierte Version neu berechnet ... Ich habe versucht, es an einer tatsächlichen Eingabe der Größe 100 zu testen, aber ich bin Ich bin mir nicht sicher, wie viele Tage es dauern wird.Eine insgesamt bessere Version:
Brachylog , 14 Bytes - 20 = -6
Probieren Sie es online!
Dies ignoriert die veralteten E / A-Anforderungen für die Kürze und vernachlässigt es, den -100-Bonus einzunehmen, damit er möglicherweise ohne einen Supercomputer getestet werden kann (obwohl ich ihn zum Zeitpunkt des Schreibens für mehrere Minuten auf nur 20 Elementen laufen ließ und so weiter) hat mir noch nichts gegeben).
quelle
Viertens (gviertens) , 79-120 = -21 Bytes
Probieren Sie es online!
Ignorieren Sie veraltete Eingabeanforderungen und nehmen Sie die Eingabe als Adresse in den Speicher, in dem die Zahlen gespeichert sind.
Erläuterung
Durchläuft alle Zahlen von 0 bis 99. Für jede Zahl (n):
Sonst (n ist gerade):
Geben Sie eine neue Zeile aus
Code-Erklärung
quelle