Nehmen Sie ein Array von ganzen Zahlen, die negative Zahlen, positive Zahlen und Nullen enthalten. Gruppieren Sie es mit einer Iteration und an Ort und Stelle , sodass alle negativen Zahlen an erster Stelle stehen, gefolgt von allen Nullen, gefolgt von allen positiven Zahlen.
Beispiel:
Input: 5, 3, 0, -6, 2, 0, 5
Output: -6, 0, 0, 3, 2, 5, 5
Beachten Sie, dass die Zahlen nicht vollständig sortiert werden müssen: nur nach Vorzeichen sortiert.
Das endgültige Array sieht also folgendermaßen aus: -, -, ..., -, -, 0, 0, ..., 0, 0, +, +, ..., +, +
Regeln
- Sie dürfen nur das Eingabearray und eine konstante Menge zusätzlichen Speichers verwenden (dh Sie dürfen keine weiteren Arrays erstellen).
- Sie dürfen nur eine Schleife verwenden, die möglicherweise nur so oft ausgeführt wird wie die Länge des Arrays. Sie dürfen keine integrierten Funktionen verwenden, die Schleifen jeglicher Art verbergen. Dies beinhaltet integrierte Sortierfunktionen.
- Das Ergebnis sollte das von mir beschriebene Format haben
Der Gewinner ist die Person, die den kürzesten Code (in Bytes gezählt) übermittelt, der das ursprüngliche Array in ein korrektes Format ändert (wie oben beschrieben).
code-golf
number
sorting
array-manipulation
Ionică Bizău
quelle
quelle
sort(...)
ist nicht in Ordnung, da es wahrscheinlich mehr als eine Iteration ausführt .Antworten:
C 92
Dies könnte wahrscheinlich um mindestens 10 Bytes reduziert werden; Es gibt viele Ausdrücke, die verschwendet werden.
Das erste Argument sollte auf den Anfang des Arrays verweisen. Die zweite sollte nach dem Ende des Arrays zeigen.
Ungolfed mit Zufallstestgenerator:
quelle
STATA 242
Folgt genau der Wikipedia-Seite. Danke @PeterTaylor
Nimmt die Eingabe als durch Leerzeichen getrennte Menge von Zahlen von std in und Ausgaben als solche auch als std out.
quelle
Python 2: 116 Bytes
Dies ist eine Golf-Python-Übersetzung des Pseudocodes der niederländischen Nationalflagge.
Mögliche 112 Bytes
Ich bin mir nicht sicher, ob dies erlaubt ist. Es wird ein zweites Array der Größe 3 erstellt (konstante Menge an zusätzlichem Speicher!).
quelle
C 90
Einfache Implementierung des Algorithmus im Wikipedia-Artikel gemäß Peter Taylors Kommentar zur Frage.
Erwartet, die Daten in einem Array zu finden, das
a
wie die andere C-Antwort aufgerufen wird .n
,p
Undz
sind Zeiger für die Insertion von negativen und positiven Zahlen und Nullen.n
undp
werden als Argumente verwendet, die auf das erste und das letzte Element der Daten verweisen.quelle
ECMAScript 157 Bytes
Nimmt die Zahlen als durch Leerzeichen oder Kommas getrennte Menge aus einem Eingabeaufforderungsdialog und gibt das Ergebnis mit einem Warnungsdialog zurück.
quelle
PHP (146)
http://3v4l.org/ivRX5
Die relativ ausführliche Variablensyntax von PHP ist hier etwas schmerzhaft ...
quelle
Rebol -
149142140Dies ist ein direkter Hafen des Wikipedia-Pseudocodes der niederländischen Nationalflagge. Unten ist, wie es ungolfed aussieht:
Anwendungsbeispiel:
NB. Rebol-Arrays (Blöcke) verwenden keine Kommas -
[5 3 0 -6 2 0 5]
Und wenn es in Ordnung ist, dies in eine Funktion zu packen, die ein Array übernimmt und es an Ort und Stelle ändert, können wir es auf 128 Zeichen reduzieren:
In der Tat, wenn Sie kein Array zurückgeben müssen (dh nur ändern), können Sie 1 weiteres Zeichen rasieren.
quelle
C ++
Nicht-Golf-Lösung: n zählt die Negative, die vor dem Array hinzugefügt wurden. Für jedes Element, wenn negativ mit Element bei n tauschen, wenn Null mit Element bei n + 1 tauschen, sonst mit letztem Element tauschen.
quelle
CJam -
7267Eingabe:
[5 3 4 0 -6 2 0 5]
Ausgabe:
[-6 0 0 4 2 3 5 5]
Probieren Sie es unter http://cjam.aditsu.net/ aus.
Erläuterung:
Dies ist eine weitere Implementierung des Algorithmus aus Wikipedia, der
T
fori
undU
for verwendetj
(beide werden automatisch auf 0 initialisiert).quelle