Die Aufgabe ist einfach: Konsolidieren Sie ein Array von Ints. Die Konsolidierung dieses Arrays umfasst Folgendes:
- Alle Instanzen von 0 müssen an das Ende des Arrays verschoben werden.
- Zwischen den Ganzzahlen ungleich Null dürfen keine Nullen stehen.
- Alle Nicht-Null-Indizes sollten ihre Reihenfolge beibehalten.
Herausforderung
Konsolidieren Sie ein Array mit der geringsten Anzahl von Bytes.
Sie konsolidieren ein Array von zufälliger Länge mit einer Größe bis zur Maximalgröße Ihrer Sprache mit zufälligen ganzen Zahlen. Die Eingabe kann auf jede natürliche Weise für Ihre Sprache erfolgen.
Beispiele
Eingang
0 5 8 8 3 5 1 6 8 4 0 3 7 5 6 4 4 7 5 6 7 4 4 9 1 0 5 7 9 3 0 2 2 4 3 0 4 8 7 3 1 4 7 5 1 2 1 8 7 8 7 7 2 6 3 1 2 8 5 1 4 2 0 5 0 6 0 3
Ausgabe
5 8 8 3 5 1 6 8 4 3 7 5 6 4 4 7 5 6 7 4 4 9 1 5 7 9 3 2 2 4 3 4 8 7 3 1 4 7 5 1 2 1 8 7 8 7 7 2 6 3 1 2 8 5 1 4 2 5 6 3 0 0 0 0 0 0 0 0
Eingang
-1 -7 -6 5 1 -5 -2 7 -3 -8 0 8 9 1 -8 -1 6 -4 1 -2 1 -7 5 4 -6 7 -3 9 8 3 -1 0 -5 -7 3 8 1 1 3 -3 -2 -2 0 -7 0 -4 8 6 -3 6 0 5 3 2 2 2 -2 -7 -3 9 -1 6 0 6 -7 9 4 -2 8 -8 -4 1 -8 4 3 7 3 5 1 0 3 3 7 -1 -5 1 -3 4 -7 0 3 2 -2 7 -3 0 0 2 -5 8 -3 -2 -7 -5 7 -3 -9 -7 5 8 -3 9 6 7 -2 4 7
Ausgabe
-1 -7 -6 5 1 -5 -2 7 -3 -8 8 9 1 -8 -1 6 -4 1 -2 1 -7 5 4 -6 7 -3 9 8 3 -1 -5 -7 3 8 1 1 3 -3 -2 -2 -7 -4 8 6 -3 6 5 3 2 2 2 -2 -7 -3 9 -1 6 6 -7 9 4 -2 8 -8 -4 1 -8 4 3 7 3 5 1 3 3 7 -1 -5 1 -3 4 -7 3 2 -2 7 -3 2 -5 8 -3 -2 -7 -5 7 -3 -9 -7 5 8 -3 9 6 7 -2 4 7 0 0 0 0 0 0 0 0 0 0
Beispielcode (Java)
public class Consolidate {
public static void main(String[] args) throws Exception {
int[] toConsolidate = new int[args.length];
for (int i=0; i<args.length; i++){
toConsolidate[i]=Integer.parseInt(args[i]);
}
for (int i=0; i<toConsolidate.length; i++) {
for (int k=0; k<toConsolidate.length-1; k++) {
if (toConsolidate[k] == 0){
toConsolidate[k] = toConsolidate[k+1];
toConsolidate[k+1] = 0;
}
}
}
for (int i:toConsolidate)
System.out.print(i+" ");
}
}
code-golf
array-manipulation
Addison Crump
quelle
quelle
Antworten:
Pyth, 3 Bytes
Erläuterung:
Probieren Sie es hier aus .
quelle
Q
kann implizit am Ende eines Pyth-Skripts stehen (vorausgesetzt, es liegt außerhalb eines Lambdas, was dies ist) und diese 2 Bytes ergeben.Gelee, 3 Bytes
Sortiert die Liste nach dem logischen NICHT ihrer Werte. Probieren Sie es online!
Wie es funktioniert
quelle
¬Þ
sogar 2 Bytes machen !Oktave, 18 Bytes
sort()
nimmt zu viele Bytes. Ich werde nur die logische Indizierung verwenden.Beispiele zu ideone .
quelle
R
292321 BytesWie von MarcoBreitig bemerkt, können wir es auf 21 Bytes verkürzen, wenn wir es nicht als Funktion bereitstellen müssen:
Vorherige Versionen:
Die Funktion nimmt einen Vektor als Eingabe und ordnet ihn nach dem logischen Vektor, der sich aus der Negierung der Eingabe ergibt.
Ursprüngliche Antwort:
Die Funktion nimmt einen Vektor als Eingabe und verkettet (
c()
) die Nicht-Null-Werte und dann die Null-Werte.quelle
Retina , 15
Einfache wiederholte Regex-Ersetzung:
Probieren Sie es online aus.
quelle
ES6, 23 Bytes
Früher
sort
war es nicht stabil, in diesem Fall brauchten Sie 41 Bytes:quelle
Python-Bytecode (2.7.9), 252 Byte, 33 Opcodes, 0,0228 Sekunden
Dies wurde gebaut, als der Wettbewerb noch ein Wettbewerb mit dem schnellsten Code war
Öffnet eine Datei im aktuellen Verzeichnis, die
'SourceArray'
zur Verwendung aufgerufen wirdThe
co_code
(Das eigentliche Codey-Bit)Oder eine .pyc-Dateiversion
03F3
Sie können versuchen, meinen Quellcode mit meiner Bibliothek auf github selbst zu kompilieren. Ich habe gerade ein Commit dazu gepostet, das Kommentare erlaubt, also hoffe ich, dass dies immer noch konkurriert, was den schnellsten Code betrifft;)
In etwa gleichwertig mit
quelle
Python, 32 Bytes
Nimmt Argumente als iterabel an (Liste, Tupel usw.). Vielen Dank an @xnor, der mir einen neuen Trick beigebracht hat!
quelle
key=0..__eq__
(ja, zwei Punkte)."abc".__eq__("abc")==True
. Es heißt, wenn du es tust"abc"==
. Aus Gründen haben Python-Ganzzahlen dies nicht, aber Floats, und da0. == 0
können wir den Gleichheitsoperator ersetzen0..__eq__
..__eq__
Methode, aber die doppelten Punkte verwirrten mich. Ich habe nicht verstanden, dass der erste Punkt der Dezimalpunkt in einem Float-Literal ist.Matlab: 21 Bytes
Druckt zuerst Elemente ungleich Null und verkettet sie dann mit Elementen ungleich Null
@(a)____
Erstellen Sie eine anonyme Funktion mit einem Eingabeargumenta
[___,___]
Verkettet horizontale Vektoren in Klammern, die durch Kommas getrennt sinda(a~=0)
Gibt den Vektor mit allen Nicht-Null-Elementen des Vektors zurücka
a(a==0)
Gibt den Vektor mit allen Nullelementen des Vektors zurücka
quelle
Haskell, 26 Bytes
Nehmen Sie alle Zahlen ungleich Null, gefolgt von allen Nullen. Filterung Konstanten (hier:
0
) ist ziemlich kurz , wenn eine Liste Verständnis mit:[0|0<-x]
.quelle
Zsh, 22 Bytes
(Eingabe als Argumente an das Skript / die Funktion übergeben (
$@
aka$argv
Array), Ausgabe auf stdout als durch Leerzeichen getrennte Liste, Zeilenumbruch beendet)<<< string
: here-string hier als stdin an den$NULLCMD
Befehl übergeben (cat
standardmäßig).${@:#0}
$@
mit der Ausnahme, dass die Elemente 0 sind.${(M)@:#0}
Umkehrung der oben genanntenDies setzt (wie bei mehreren anderen Antworten hier) voraus, dass Nullen in der Eingabe alle als
0
(no00
nor0x0
nor36#0
) ausgedrückt werden .quelle
Javascript,
525451 Bytesquelle
Mathematica, 14 Bytes
quelle
Sort[#!=0&]
sollte genug sein.APL: 8 Bytes
a ~ 0 entfernt Nullen von einer (gelesen "a ohne 0")
(⍴a) ursprünglichen Länge von a (gelesen "Form von a")
↑ füllt a ohne Nullen mit der ursprünglichen Länge von a auf
Versuchen Sie es unter http://ngn.github.com/apl/web/index.html
Testdaten: a ← 1 0 1 2 3 4 0 1 0 0 0 1 2 3 4 5
quelle
⍴↑{⍵~0}
und das ist noch kürzer.Java 7, 78 Bytes
Ich bin nicht sicher, warum die anderen Java-Einträge Zeichenfolgen verwenden. Wenn Sie ein ganzzahliges Array filtern möchten, empfiehlt es sich, ein ganzzahliges Array zu verwenden. Dadurch wird die Eingabe geändert, indem zwei Indizes beibehalten werden und die verbleibenden Slots nur mit Nullen gefüllt werden.
quelle
o
mit zu erklärenint c=0,o;for(o:a)...
. Sie können auch in die Java 8-Lambda-Syntax konvertieren:a->{int c=0;for(int o:a)a[o==0?c:c++]=o;for(;c<a.length;a[c++]=0);}
und angeben, dass die Eingabe als int-Array erwartet wird.Common Lisp, 46 Bytes
Sortieren , so dass die Anordnung , dass für jedes Paar (a, b) , haben wir ein <b , wenn b Null ist. Wenn weder a <b noch b <a , ist die Sortierung stabil: Die ursprüngliche Reihenfolge zwischen den Elementen wird beibehalten.
Ich habe es auch mit adjust-array und remove versucht , aber das war zu lang:
quelle
PHP,
73717052494846 Bytes - GROSS dank Ismael Miguelquelle
$v==0
kann durch ersetzt werden!$v
, wodurch Sie 2 Bytes sparen.foreach($argv as$v)$v?$f.=" $v":$b.=" $v";echo$f.$b;
. Es ist ... einige Bytes, ich weiß nicht ...foreach($a as$v)$v?print("$v "):$b.="$v ";echo$b;
für eine ordentlichere Art, das sieht genauso ausBash + GNU-Dienstprogramme, 23
Angenommen, es handelt sich bei der Eingabe um durch Zeilenumbrüche getrennte Einträge in einer aufgerufenen Datei
a
. Die Punktzahl enthält +1 für diesen Dateinamen.quelle
Perl 5, 26 Bytes
23 plus drei für
-an
(-E
ist kostenlos)Vielen Dank an Dennis , der mich daran erinnert hat
-a
, zwei Bytes gespart zu haben.quelle
CJam, 6 Bytes
Eine anonyme Funktion. Sortieren Sie mit "ob ein Element Null ist oder nicht" als Schlüssel.
quelle
MATL , 7 Bytes
Probieren Sie es online!
quelle
Im Ernst, 12 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Schnell , 13 Bytes
quelle
Perl6, 11 Bytes
Erzeugt einen Block, der in einem Array aufgerufen werden kann:
Obwohl es natürlicher (und kürzer) wäre zu schreiben:
So funktioniert es: Wird die Sortierroutine perl6 mit einem Block aufgerufen, der nur ein Argument akzeptiert, werden die Listenelemente nach diesem sortiert
by($a) cmp by($b)
. In diesem Fall ist der Block!*
also eine Negation des beliebigen Operators .Ich bemerke das:
quelle
TeX (einfaches Format), 160 Byte
Aktivieren Sie das
0
Zeichen (dh, der Interpreter verarbeitet es als Befehl) und definieren Sie diesen Befehl, um das Zeichen zu überspringen und einen Zähler zu erhöhen. Geben Sie am Ende der Zeichenfolge so viele Nullen aus, wie gezählt wurden.Speichern Sie dies als
zero.tex
und geben Sie die Eingabe über die Befehlszeile mit diesem Befehl ein:(Zeilenumbrüche zur Verdeutlichung hinzugefügt)
quelle
J, 4 Bytes
Erläuterung:
Die Sortierfunktion in J ist durch die Spezifikation garantiert stabil.
Alternative Lösung, 6 Bytes:
quelle
Stroh ,
3029 BytesVerwenden Sie die CP437-Codierung
Erläuterung
Probieren Sie es online! (Der hinzugefügte Code dient zum Testen aller Testfälle.)
quelle
JavaScript ES6, 16 Byte
Funktioniert mit Firefox
quelle
Ruby , 25 Bytes
Probieren Sie es online!
quelle
05AB1E ,
1514 BytesCode:
Erläuterung:
Verwendet die CP-1252-Codierung. Nimmt ein Array wie folgt an:
quelle