Über Code-Bowling:
Beim Golf versuchen Sie, die niedrigste Punktzahl zu erzielen (kleinste Anwendung, eleganteste usw.). In Bowling versuchen Sie, die höchste Punktzahl zu erzielen. Wenn Sie also folgen, besteht das Ziel einer Code-Bowling-Herausforderung darin, den größten, am meisten verfälschten und am schwierigsten zu verwaltenden Teil des Codes so zu gestalten, dass er die Anforderungen der Herausforderung noch erfüllt. Es macht jedoch keinen Sinn, die Quelle nur deswegen länger zu machen. Es muss so aussehen, als ob die zusätzliche Länge vom Design und nicht nur der Polsterung herrührt.
Die Herausforderung:
Erstellen Sie ein Programm, das eine Liste von Zahlen in aufsteigender Reihenfolge sortiert.
Beispiel:
Eingabe: 1, 4, 7, 2, 5
Ausgabe: 1, 2, 4, 5, 7
Code: Offensichtlich wäre dies keine gute Antwort, da es dort nicht viele WTFs gibt
function doSort(array $input) {
sort($input);
return $input;
}
Regeln:
Es gibt keine wirklichen Regeln. Solange das Programm funktioniert, muss es sein!
Denken Sie daran: Dies ist Code-Bowling, nicht Golf. Das Ziel ist es, den schlechtesten und am meisten bastardisierten Code zu erstellen, den Sie können! Bonuspunkte für Code, der gut aussieht, aber tatsächlich trügerisch böse ist ...
quelle
sort(sort(sort(sort(sort(sort(myarray))))))
Garantiert perfekte Sortierung!Antworten:
Sortieren nach Benutzereingabe. Was kann schlimmer sein?
Siehe Live- Beispiel
quelle
Ah, die Eleganz von Ruby ... self.permutation ergibt einen Enumerator. Noch kein Schaden angerichtet. Die unschuldig aussehende .min saugt diesen Enumerator jedoch in ein Array. Die Größe dieses Arrays explodiert, wenn die Anzahl der Elemente steigt. Ganz zu schweigen davon, dass dies eine bereits existierende Sorte ruiniert.
quelle
Bogosort!
quelle
O(2n random)
Perl Bubble Sort
Ich habe mich für den Look "Jede einzelne Linie sieht aus wie das gleiche Rauschen" entschieden. Die erste Eingabezeile (bei STDIN) teilt dem Programm mit, wie viele Nummern es gibt, während die nächsten N Zeilen eine Nummer enthalten, die sortiert werden muss.
quelle
Generischer Multithread-Bogosort in Java
46 Sekunden, um 4 Zahlen zu sortieren
Ich dachte, es wäre elegant mit Unterstützung für Generika. Auch Multithreading ist immer schön, also verwende ich das anstelle von Randomisierung: Dieses Programm generiert einen Thread für jede zu sortierende Zahl. Jeder Thread versucht, sein Element in ein Array-Objekt einzufügen. Wenn alle Elemente eingefügt wurden, prüft das Programm, ob das Array sortiert ist. Wenn nicht, versuchen Sie es erneut. Natürlich muss diese Einfügung synchronisiert werden.
ElementInserter
Dies ist die Klasse, die wir für die Threads verwenden. Diese Klasse enthält ein Element und versucht, es in das
sortedArray
folgende einzufügen :sortiertArray
Sport eine einfache Einfügemethode. Wenn das letzte Element eingefügt wurde, prüft es, ob das Array sortiert ist.
Hauptmethode
Analysiert Befehlszeilenargumente als Ganzzahlen, erstellt ein neues Array und einen neuen Thread für jede Ganzzahl:
Testlauf
Die Ausführungszeit hängt von der ursprünglichen Reihenfolge der Elemente und Ihrer Scheduler-Implementierung ab. Dies ist auf einem Dual-Core-2,9-GHz-Intel i7 MacBook Pro:
quelle
JavaScript (mit Animation!). 8172 Zeichen. Einige Stunden für 6 Nummern.
Wir mögen Lotto, richtig? Ähnlich wie Bogosort von dan04, aber mit Physik und Animation ...
Allerdings habe ich ein bisschen Google Closure Compiler benutzt, um ... ich weiß es nicht. Aber es sieht hässlicher aus, oder?
Es ist wie eines dieser Glücksräder, und jedes Mal, wenn es anhält, wechselt es zu Zahlen in der Mitte. Sie können hier spielen: http://jsfiddle.net/VkJUE/5/ (um zu verstehen, was ich meine)
Es funktioniert ein bisschen, außer dass es für 6 Nummern Stunden dauern kann. Allerdings habe ich es an 3 Nummern getestet und es funktioniert einwandfrei!
quelle
Obwohl ich diesen Java- Code nicht würdigen kann, ist Smoothsort ein gutes Beispiel für den Kompromiss zwischen Lesbarkeit und Leistung:
(Hinweis: Einige Kommentare wurden entfernt, um den Effekt zu verbessern und ihn zu verkürzen. Quelle stammt von der oben verlinkten Wikipedia-Seite.)
quelle
Das F # "Ich hasse funktionale Programmierung":
quelle
Ruby Metasort
quelle
Ein Cobol-Unterprogramm zum Sortieren einer Tabelle mit ganzen Zahlen, die garantiert eine höhere WTF / Minute als jede andere Sprache haben. Zu Leistungszwecken wird der QuickSort-Algorithmus verwendet:
quelle
QwikSort
stattdessen istQuickSort
? (zB Längenbeschränkung oder du kannst den Buchstaben u nicht in einem Namen verwenden?) Weil das noch mehr Spaß machen würde: Phttp://www.jsfiddle.net/sAFMC/
quelle
Python-Quicksort mit Lambda
Etwas, das ich in meinem Blog geschrieben habe:
Hier ist der aktuelle Blogbeitrag
quelle
Rubin
quelle
C ++ (4409)
Einige "schlechte" Dinge an diesem Programm:
Wirklich fädelig. :) Ich hätte einfach die Zahlen direkt eingeben können, anstatt die Zeichenfolge nach Zahlen zu durchsuchen.
Verwendet übermäßige Klassen. Ich hätte auch die eingebauten verwenden können, aber ein schlechter Codierer würde das Rad einfach neu erfinden.
Die Schleife für die Sortierung ist schrecklich ineffizient. Ich denke, es ist der langsamste Weg, ohne dass es so aussieht, als hätte ich versucht, es langsam zu machen. Tatsächlich entspricht der eigentliche "Sortier" -Teil des Codes nur 11 Zeilen, einschließlich der geschweiften Klammern und Zeilenumbrüche.
quelle
Dieser ist O (n * n!)
Es durchläuft alle Permutationen der Liste und prüft, ob sie sortiert sind. Es ist so schrecklich, dass das Sortieren von nur 10 Artikeln 17 Sekunden dauert
quelle
T-SQL
(SQL Server 2008 R2)
Natürlich verwenden Sie bei T-SQL "ORDER BY" zum Sortieren. Duhhh.
Siehe "BESTELLEN NACH"? Es ist genau dort in der Cursor-Deklaration.
quelle
Python- Implementierung von Funnel Sort . Dieser Algorithmus kann bei richtiger Implementierung tatsächlich eine gute Cache-Leistung aufweisen, was in diesem Fall mit Sicherheit nicht der Fall ist (er sortiert jedoch korrekt).
quelle
Sortiert eine Liste von 32-Bit-Ganzzahlen. Für die meisten normalen Fälle ist es tatsächlich recht effizient:
Beispiel:
quelle
quelle
sort()
nach Referenz arbeitet und nicht einmal etwasC ++ , nicht sicher, ob es Namen für diese Art gibt, aber hier geht
<ducks for cover/>
quelle
Eine Unternehmenslösung (im Pseudocode):
quelle
In Ruby eine visuelle Darstellung eines " Spaghetti-Sortierung" , die in einem Terminal mit 80 Spalten ausgeführt werden soll:
Verwendung:
p sort (1..10).map{rand(100)}
quelle
PL \ SQL - 109 Zeilen
Dies ist eine Antwort auf den Kommentar von @ eBusiness in der Antwort von @ steenslag. Es dient keinem nützlichen Zweck.
Es hat 4 Stufen:
Wie Sie sehen, ist es lächerlich ... Schlechte Dinge sind:
Das wars eigentlich schon, es sollte extrem schnell gehen.
quelle
Sowohl die Wahl der Sprache als auch der Algorithmus müssen erklärt werden.
Dieser Algorithmus wird als langsame Sortierung bezeichnet. Ich habe vor, den Mist aus Bogosort herauszuschlagen (teste zufällige Permutationen, bis sie sortiert sind), weil die Implementierung zwar algorithmisch schrecklich ineffizient ist, aber zu einfach ist und man ihre Langsamkeit nicht garantieren kann.
Ich codiere langsame Sortierung in Scheme, weil das Hauptziel von Scheme darin besteht, einfach zu sein, was dies zu einer größeren Herausforderung macht. Ein interessantes Merkmal von Scheme ist die unschlagbare Erweiterbarkeit. Tatsächlich werden Implementierungen der Sprache häufig (häufig vollständig) in Schema selbst implementiert. Noch besser: Sie benötigen lediglich Abstraktionen (Lambdas) und Anwendungen. Anwendungen werden in Präfixnotation ausgewertet:
... ist nur syntaktischer Zucker für:
... das eine Funktion auf Listen von Argumenten anwendet.
Um aus diesem Code-Bowling einen Strich zu machen, muss ich die Max-Funktion neu definieren, um die Liste rekursiv zu teilen, bis sie sich selbst vergleichen kann. Die min-Funktion wird auch rekursiv unter Verwendung von max neu definiert, indem alle Maxima entfernt werden, bis eine Zahl übrig bleibt. Schließlich wird die Sortierung neu definiert, indem die Minima nacheinander angehängt werden.
Langsame Sortierung basiert auf "Multiplizieren und Ergeben" im Gegensatz zu "Teilen und Erobern". Es funktioniert, indem rekursiv die Maxima herausgezogen werden, bis das Minimum übrig bleibt, jedes Mal das resultierende Minimum an die Lösung angehängt wird und erneut gestartet wird, bis alle Minima der Reihe nach angehängt wurden. Obwohl meine Implementierung völlig ineffizient ist, verwendet sie die Berechnungen so oft wie möglich erneut, weil: 1) Sie für den Algorithmus benötigt werden 2) Sie möchten möglicherweise, dass diese Art eines Tages endet ...
quelle
Java übertriebenes Chaos / Schweregefühl
Das hat Spaß gemacht! Es fühlt sich komisch an, so etwas zu posten.
quelle
Python
Funktioniert nur, wenn alle Artikel weniger als 9e99 sind :)
Extrahieren Sie jedes Mal durch die Schleife das kleinste Element und ersetzen Sie es durch 9e99
quelle
Python (634)
Wenn die Liste sortiert ist, drucken Sie sie aus. Tauschen Sie andernfalls zwei Elemente in der falschen Reihenfolge aus und generieren Sie ein Python-Skript, das die neue Reihenfolge verarbeitet. Löschen Sie anschließend das erstellte Skript.
quelle
Bogobogosort in Python
Von David Morgan-Mar erfundener Algorithmus.
Achtung: Versuchen Sie dies nicht mit einer Liste, die größer als 5 Elemente ist. Sogar 5 ist sehr langsam.
quelle
Python
Meine Lösung. Beinhaltet eine Fehlerbehandlung und eine Funktion, mit der Leerzeichen beim Sortieren von Zahlen beibehalten werden, dh Leerzeichen bleiben erhalten. Zahlen bewegen sich.
z.B,
Code:
quelle
Python 3
Dieses Programm akzeptiert eine durch Leerzeichen getrennte Liste von Zahlen in der Standardeingabe. Anschließend wird die Standardausgabe in der richtigen Reihenfolge gedruckt. Schließlich.
Erklärung: Das pickle-Protokoll bietet tatsächlich viel Freiheit, insbesondere die Freiheit, beliebige Objekte mit Argumenten zu importieren und aufzurufen. Die wichtigste Einschränkung besteht darin, dass die Pickle-VM keine Flusssteuerung besitzt. Daher muss jeder Code, der ausschließlich in der Pickle-VM implementiert ist, die Flusssteuerung in den Funktionen der Python-Standardbibliothek verwenden, um ähnliche Effekte zu erzielen. Diese Implementierung der Sortierung verwendet eine Coroutine-basierte Schlafsortierung, die durch liberale Anwendung von Iteratoren und Teilanwendungen erstellt wurde.
Der äquivalente Python-Code würde ungefähr so lauten:
quelle