Bei einer nicht leeren Liste / Array, die nur nicht negative ganze Zahlen enthält, wie folgt vorgehen:
[0, 0, 0, 8, 1, 4, 3, 5, 6, 4, 1, 2, 0, 0, 0, 0]
Geben Sie die Liste mit entfernten nachgestellten und führenden Nullen aus.
Die Ausgabe hierfür wäre:
[8, 1, 4, 3, 5, 6, 4, 1, 2]
Einige andere Testfälle:
[0, 4, 1, 2, 0, 1, 2, 4, 0] > [4, 1, 2, 0, 1, 2, 4]
[0, 0, 0, 0, 0, 0] > nothing
[3, 4, 5, 0, 0] > [3, 4, 5]
[6] > [6]
Kürzester Code gewinnt
code-golf
array-manipulation
Lamaro
quelle
quelle
Nil
()
/[]
slip()
/Empty
Any
{}
einige von ihnen sind nicht definiert, einige definiert aber singulär, einige , dass Schlupf in anderen Listen , so dass sie die Anzahl der Elemente nicht erhöhen. (Es gibt so viele verschiedene VariationenAny
wie es Klassen / Typen und Rollen gibt)"0,4,1,2,0,1,2,4,0" => "4,1,2,0,1,2,4"
BEARBEITEN: Gerade bemerkt, dass viele Sprachen dies bereits tun.Antworten:
Gelee , 2 Bytes
Code:
Erläuterung:
Probieren Sie es online!
quelle
JavaScript (ES6) 43
Weniger golfen
Prüfung
quelle
f=(a,r=f(a,a))=>r.reverse().filter(x=>a|=x)
ist auch 43 Bytes.CJam, 13 Bytes
Mit dem Array eingegeben.
Längere Version:
quelle
Pyth, 4 Bytes
Demo:
Von Pyths
rev-doc.txt
:quelle
05AB1E , 4 Bytes
Code:
Probieren Sie es online!
Erläuterung:
Verwendet CP-1252-Codierung.
quelle
Retina, 12 Bytes
Der Zeilenvorschub am Ende ist signifikant.
Vielen Dank an @Martin Büttner und @FryAmTheEggman für die Einsparung einiger Bytes.
Probieren Sie es online aus
quelle
R, 43 Bytes
oder als Lese- / Schreib-STDIN / STDOUT
Hiermit wird das kumulative Maximum vom Anfang bis zum Ende der (umgekehrten) Zeichenfolge ermittelt. Der
&
Operator konvertiert diese beiden Vektoren in logische Vektoren der gleichen Größe wiex
(Nullen werden immer inFALSE
und alles andere in konvertiertTRUE
). Auf diese Weise ist es möglich, eine Teilmengex
entsprechend den erfüllten Bedingungen zu erstellen.quelle
Haskell , 29 Bytes
quelle
Mathematica
3427 BytesDies wendet wiederholt Ersetzungsregeln an, bis eine solche Aktion keine neue Ausgabe liefert. 7 Bytes dank Alephalpha gespart.
Die erste Regel löscht am Anfang eine Null. Die zweite Regel löscht eine Null am Ende des Arrays.
quelle
#//.{0,a___}|{a___,0}:>{a}&
05AB1E, 4 Bytes
Grundsätzlich werden führende und nachfolgende Nullen der Eingabe in Form eines Arrays abgeschnitten.
Probieren Sie es online!
quelle
Perl, 19 + 1 = 20 Bytes
Benötigt
-p
Flagge:quelle
s/^0 | 0$//&&redo
?
wie im Beispiel fallen lassen - aber das wird nicht reduziert"0"
..Gelee, 10 Bytes
Dies nutzt nicht die eingebaute.
Probieren Sie es hier aus .
quelle
Perl, 38 Bytes
Laufen Sie mit
perl -p
, (3 Bytes hinzugefügt für-p
).Akzeptiert Nummern auf STDIN, eine pro Zeile; Gibt Zahlen auf STDOUT aus, eine pro Zeile, wie es ein ordentliches Unix-Dienstprogramm tun sollte.
Nur Zahlen, die genau durch '0' dargestellt werden, werden als Nullen behandelt. Es wäre möglich, andere Darstellungen mit ein paar weiteren Bytes im regulären Ausdruck zu unterstützen.
Längere Version, noch lauffähig mit
-p
:Erweiterte Version, die Interaktionen mit dem Flag -p anzeigt:
quelle
perl -E
, wird das-p
Flag in der Regel nur als ein Byte gezählt, da nur ein zusätzliches Byte zwischen diesem und dem Byte liegtperl -pE
.Elixier, 77 Bytes
l ist das Array.
Edit: Wah! Kopieren / Pasta scheitern. Natürlich muss man Enum importieren, was die Byteanzahl um 12 erhöht (oder Enum.function_name verwenden, wodurch es noch länger wird).
quelle
Vitsy, 13 Bytes
Vitsy geht es langsam besser ... (Ich komme, um dich zu holen, Jelly. ಠ_ಠ)
Dies wird mit dem Array auf dem Stapel beendet. Zur besseren Lesbarkeit bietet TryItOnline! Ein Link, den ich unten angegeben habe, gibt eine formatierte Liste aus.
Erläuterung:
Beachten Sie, dass dies eine StackOverflowException für unangemessen große Eingaben auslöst.
TryItOnline!
quelle
R, 39 Bytes
Vier Bytes kürzer als die R-Antwort von David Arenburg . Diese Implementierung findet den ersten und letzten Index im Array, der größer als Null ist, und gibt alles im Array zwischen diesen beiden Indizes zurück.
quelle
MATL , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Dyalog APL, 15 Bytes
Probieren Sie es hier aus .
quelle
{⌽⍵/⍨×+\⍵}⍣2
?Ruby,
4944 BytesDank der Handarbeit für das von 5 Bytes mit einer ganz anderen Methode!
Dies ist nur
drop
das erste Element des Arrays,while
es ist 0, kehrt das Array um, wiederholt es und kehrt schließlich das Array um, um es in die richtige Reihenfolge zu bringen.quelle
.drop_while()
basierte Lösung kürzer (wenn 2 Funktionen verwendet würden):f=->a{a.drop_while{|i|i<1}.reverse};->a{f[f[a]]}
eval
Hässlichkeit:->a{eval ?a+'.drop_while{|i|i<1}.reverse'*2}
.<1
. Vielen Dank!Vim 16 Tastenanschläge
Die Eingabe ist vom Benutzer zwischendurch zu tippen
i
undesc
und gilt nicht als Tastendruck. Dies setzt voraus, dass es mindestens eine führende und eine nachfolgende Null geben wird. Wenn dies keine gültige Annahme ist, können wir diese etwas längere Version verwenden: (18 Tastenanschläge)quelle
i
und<esc>
) eingeben kann . In Vim Golf beginnt der Golfer mit der Eingabe bereits in einer Datei geladener Puffer und dem Cursor in der oberen linken Ecke, aber der Benutzer muss auch speichern und beenden (ZZ
ist in der Regel der schnellste Weg). Dann könnten Sie so etwas tund[1-9]<enter>$NlDZZ
(13 Tastenanschläge). AnmerkungN
/n
anstelle von/<up><enter>
ES6, 51 Bytes
t
wird auf den Index nach dem letzten Nicht-Null-Wert gesetzt, währendf
inkrementiert wird, solange bis jetzt nur Nullen gesehen wurden.quelle
Perl 6 , 23 Bytes
Verwendung:
quelle
Retina, 11 Bytes
Ziemlich einfach. Ersetzt rekursiv Nullen am Zeilenanfang und Zeilenende.
Probieren Sie es online!
quelle
JavaScript (ES6), 47 Byte
Wo
a
ist das Array?quelle
a=>a.join(a="")...
.[14]
wird zurückkehren[1, 4]
.Python, 84 Zeichen
quelle
for i in-1,0:
JavaScript (ES6), 34 Byte
Eingabe und Ausgabe erfolgen in Form einer durch Leerzeichen getrennten Liste, z
"0 4 1 2 0 1 2 4 0"
.quelle
Javascript (ES6) 40 Bytes
quelle
PHP,
565452 BytesVerwendet die Windows-1252-Codierung
String-basierte Lösung
Laufen Sie wie folgt:
Wenn Ihr Terminal auf UTF-8 eingestellt ist, ist dies dasselbe:
Optimierungen
quelle
Python 2,
6967 Bytesquelle
for i in-1,0:
[space][space]while
mit[tab]while
. Und==0
kann sein<1
. mothereff.in/…PowerShell, 49 Byte
Nimmt Eingaben auf
$args[0]
und-join
fügt sie zusammen mit Kommas zu einem String zusammen. Wir verwenden dann die.Trim()
Funktion, die zweimal aufgerufen wird, um zuerst die nachfolgenden und dann die führenden Nullen und Kommas zu entfernen. Wir setzen dann-split
die Zeichenfolge mit Komma wieder in ein Array.Alternative Version, ohne Konvertierung
PowerShell, 81 Bytes
Da PowerShell keine Funktion zum Trimmen von Arrays hat, definieren wir eine neue Funktion
f
, die die Hälfte davon für uns erledigt . Die Funktion nimmt$a
als Eingabe und durchläuft dann jedes Element mit einer foreach-Schleife|%{...}
. Bei jeder Iteration prüfen wir eine Bedingung auf$_ -or $b
. Da Ganzzahlen ungleich Null wahr sind, aber$null
falsch sind (und$b
, da sie zuvor nicht definiert wurden, wie$null
folgt beginnen ), wird dies erst ausgewertet,$true
wenn wir unser erstes Element im Array treffen, das nicht Null ist. Dann setzen wir$b=1
den aktuellen Wert und fügen ihn$_
der Pipeline hinzu. Dies wird dann bis zum Ende des Eingabearrays fortgesetzt, wobei Nullen in der Mitte und das Ende zur Ausgabe hinzugefügt werden, da wir die$b
Wahrheit gesetzt haben.Wir kapseln und speichern die Ergebnisse der Schleife wieder in
$a
. Dann indizieren wir$a
in umgekehrter Reihenfolge (dh umkehren des Arrays), was in der Pipeline verbleibt und somit der Rückgabewert der Funktion ist.Wir rufen die Funktion zweimal auf
$args[0]
Eingang des Programms auf, um von vorne zu "trimmen", dann wieder von vorne (das ist die Rückseite, da wir umgekehrt haben). Die Reihenfolge bleibt erhalten, da wir zweimal umkehren.Diese Version spielt ein wenig locker mit den Regeln für ein Eingabearray mit allen Nullen, aber da das Ignorieren von STDERR als gängige Praxis gilt, gibt das Programm zwei (ausführliche)
Cannot index into a null array
Fehler an (PowerShell-Entsprechung von) STDERR aus und gibt dann nichts aus.quelle