Inspiriert von dieser SO-Frage
Als Eingabe erhalten Sie eine nicht leere Liste mit ganzen Zahlen, wobei der erste Wert garantiert ungleich Null ist. Gehen Sie zum Erstellen der Ausgabe vom Anfang der Liste aus, und geben Sie dabei jeden Wert ungleich Null aus. Wenn Sie auf eine Null stoßen, wiederholen Sie stattdessen den Wert, den Sie zuletzt zur Ausgabe hinzugefügt haben.
Sie können ein Programm oder eine Funktion schreiben und die Ein- / Ausgabe in ein beliebiges Format bringen, das keine zusätzlichen Informationen codiert, solange es sich um eine geordnete Folge von ganzen Zahlen handelt. Wenn Sie von einem Programm ausgeben, können Sie eine abschließende neue Zeile drucken. Abgesehen von dieser nachgestellten Zeile sollte Ihre Ausgabe eine akzeptable Eingabe für Ihre Einreichung sein.
Der kürzeste Code in Bytes gewinnt.
Testfälle
[1, 0, 2, 0, 7, 7, 7, 0, 5, 0, 0, 0, 9] -> [1, 1, 2, 2, 7, 7, 7, 7, 5, 5, 5, 5, 9]
[1, 0, 0, 0, 0, 0] -> [1, 1, 1, 1, 1, 1]
[-1, 0, 5, 0, 0, -7] -> [-1, -1, 5, 5, 5, -7]
[23, 0, 0, -42, 0, 0, 0] -> [23, 23, 23, -42, -42, -42, -42]
[1, 2, 3, 4] -> [1, 2, 3, 4]
[-1234] -> [-1234]
quelle
[0,0]
?[1,01]
? Vergleichen Sie dies und das mit der Pyth-Antwort von issac .01
ist keine gültige Ganzzahl in der Pyth-Eingabe, daher muss isaac dies nicht berücksichtigen. Andere Antworten können solche Eingaben akzeptieren, wenn sie wollen, nur solange sie konsistent sind (wie die Antwort von Isaac diese Liste niemals als AusgabeAntworten:
Pyth, 6 Bytes
Demonstration
m ... Q
Dies bedeutet, dass dem Eingang eine Funktion zugeordnet wird. Die zugeordnete Funktion lautetJ|dJ
. Dies bedeutetJ = d or J
in Python, daJ
bei der ersten Verwendung dem folgenden Wert implizit zugewiesen wird. Im Gegensatz zu Python geben Zuweisungsausdrücke den in Pyth zugewiesenen Wert zurück, sodass die Map nach Bedarf jeden nachfolgenden Wert von zurückgibtJ
.quelle
Gelee , nicht konkurrierend
3 Bytes Diese Antwort ist nicht konkurrierend, da sie Funktionen verwendet, die die Herausforderung nachholen.
Probieren Sie es online!
Wie es funktioniert
quelle
Ruby, 25 Bytes
Das ist wirklich böse.
Insbesondere das Snippet
x==0 ? a : (a=x)
.Wenn ich einen anderen Variablennamen für
a
(den vorherigen Wert ungleich Null) verwendet hätte - sagen wir mal -,y
müsste ich ihn außerhalb von deklarierenmap
(weil ery=x
nur einen Gültigkeitsbereich innerhalb dieser einzelnenmap
Iteration hätte). Das würde vier Zeichen mehr verbrauchen (y=0;
).Aber wenn ich den Variablennamen
a
benutze ... ja, Sie haben es erraten. Ich ordne das Argument, das wir als Eingabe erhalten haben (das ursprüngliche Array), neu zu.map
ist egal, weil es nur um den ursprünglichen Wert der Sache geht, auf die es angerufen wird, also funktioniert dies tatsächlich.quelle
Haskell, 21 Bytes
Die (anonyme) Funktion, die wir ausführen, steht in der letzten Zeile. Die ersten beiden Zeilen definieren eine Hilfsfunktion.
Die Binärfunktion
%
gibt das zweite Argument aus, sofern dies nicht0
der Fall ist. In diesem Fall wird stattdessen das erste Argument ausgegeben.scanl1
Durchläuft diese Funktion die Eingabeliste und gibt das Ergebnis bei jedem Schritt aus.quelle
J, 8 Bytes
Dies ist eine unäre Funktion, die wie folgt aufgerufen wird.
Erläuterung
quelle
{:@(#~|)\
also ein Byte länger.Sed, 8
/^0$/
Stimmt mit einer Null in einer Zeile überein - wenn diesg
der Fall ist, wird der Haltebereich in den Musterbereich kopierth
kopiert den Pattern Space in den Hold SpaceGanzzahlen werden durch Zeilenvorschub getrennt. z.B:
quelle
Javascript ES6, 19 Bytes
Einfache Lösung, eine Schleife durch Eingabe assign
p
aktuelles Elementi
oderp
wenni
ist0
und gibt es.Beispiellauf (Zuweisen einer anonymen Funktion an
f
):quelle
Netzhaut , 15 Bytes
Probieren Sie es online aus.
Ersetzt wiederholt eine Zahl gefolgt von einer Null durch die doppelte Zahl, bis sich die Zeichenfolge nicht mehr ändert.
quelle
Dyalog APL,
12109 BytesInspiriert von @ Zgarbs J-Antwort.
Probieren Sie es hier aus .
quelle
Pyth, 8 Bytes
Verwendet
.u
(kumulativ reduzieren) von|
(Pythonor
), mit Basisfall 0.quelle
.u
länger zu dauern, auch wennJ
undK
gefesselt sind. Ist es jemals optimal?Python 2, 29 Bytes
Nimmt die Eingabe als eine Zahl pro Zeile und gibt sie im gleichen Format aus. Beendet mit Fehler nach Abschluss.
Unter Verwendung der Kurzschlusscharakteristik von
or
wird die Variablex
auf den Eingang aktualisiert, es sei denn, dieser Eingang ist 0 (was Falsey ist). In diesem Fall bleibt er auf seinem aktuellen Wert. Dannx
wird gedruckt. Da der erste Listenwert ungleich Null ist,x
wird er vor der Zuweisung nicht auf der rechten Seite ausgewertet.quelle
#\nJ|EJ
Mathematica 38 Bytes
Pattern - Matching ersetzt wiederholt
...a,0,...
mit...a,a...
quelle
Matlab, 41
46BytesDies ist inspiriert von meiner ursprünglichen Antwort , mit den folgenden Unterschieden:
nonzeros
.0
.Vielen Dank an Tom Carpenter für Punkt 4 und für seinen Vorschlag, ein Programm anstelle einer Funktion zu verwenden. zusammen erlaubten diese eine Reduzierung von 5 Bytes.
Beispiel:
quelle
x=input('')
anstelle der Funktionsdeklaration unddisp(u(t)
anstelle desy=
Bits. Sie können auch vier weitere Bytes einsparen, indem Sie diet
Variable entfernen, wasx=input('');u=x(~~x);disp(u(cumsum(~~x)))
41 ergibt .@(x)x(~~x)(cumsum(~~x))
arbeite in Octave.Gol> <> , 8 Bytes
Eingabe und Ausgabe sind durch Zeilenumbrüche getrennte Zahlen.
Erläuterung:
Probieren Sie es hier online aus.
quelle
Japt,
87 BytesZiemlich einfach. Nimmt die Eingabe durch Kommas getrennt. Probieren Sie es online!
Ungolfed und Erklärung
Nicht konkurrierende 4-Byte- Version: (
å
Befehl und!
Auto-Funktion nach Challenge hinzugefügt)Erläuterung:
Probieren Sie es online!
quelle
ª
ist OR, anstattº
? Istº
UND zufällig?º
ist((
. Sie wurden durch den Unicode-Wert zugewiesen, da ich die Notwendigkeit für sie gefunden habe: Pª
nd undº
r sind jedoch genial, ich könnte das für Japt 2.0 verwenden ...Java, 78
Hier verfolgen wir nur den letzten Wert ungleich Null und schieben ihn gegebenenfalls ein. Scheint der naheliegende Weg zu sein.
quelle
Prolog (SWI) , 54 Bytes
Probieren Sie es online!
Erläuterung
Ich bin sehr zufrieden mit dieser Antwort.
Zuerst sagen wir, dass die leere Liste die Lösung der leeren Liste ist:
Dann sagen wir, das
[X,X|Y]
ist die Lösung von[X,0|T]
, wenn durch Entfernen des zweiten Eintrags jeder der verbleibenden Lösungen.Zuletzt sagen wir, dass alles, was übrig bleibt, gültig ist, wenn es mit demselben Wert beginnt und der Rest der beiden Listen miteinander übereinstimmt.
Wenn diese Erklärung für Sie nicht funktioniert, finden Sie hier den in Haskell übersetzten Code:
Probieren Sie es online!
quelle
GolfScript, 10 Bytes
Dieses Programm nimmt die Eingabe von stdin in Form eines GolfScript-Array-Literal (z. B.
[1 0 2 0]
) entgegen und schreibt die Ausgabe im gleichen Format (z[1 1 2 2]
. B. ) auf stdout .Probieren Sie es online aus.
Eine Funktion (die ein GolfScript-Array annimmt und zurückgibt) wäre drei Byte länger, da sie in einen Block eingeschlossen und einem Symbol zugewiesen werden muss:
Natürlich, wenn nur die Funktion Körper (dh
[{1$or}*]
) gezählt wird, dann kann ich tatsächlich speichert ein Byte in das Stand-alone - Programm verglichen.quelle
Minkolang 0.14 ,
1210 BytesProbieren Sie es hier aus. Die Eingabe kann wie in der Frage erfolgen, jedoch ohne Klammern .
Erläuterung
Minkolang ist toroidal, so dass es sich an den Anfang dreht und so lange weitergeht, bis es auf das Tor trifft
.
und aufhört.quelle
𝔼𝕊𝕄𝕚𝕟 7 Zeichen / 12 Bytes
Try it here (Firefox only).
Erläuterung
quelle
O , 31 Bytes
Dies nimmt eine durch getrennte Eingabe
,
und gibt dieselbe Liste in aus[]
.Erläuterung:
17 Bytes
Nimmt Eingaben als Liste von Zahlen entgegen, die durch Leerzeichen in der Postfix-Notation getrennt sind, und kann nur einstellige hexadezimale Zahlen verarbeiten. Negative werden mit postfixiert
_
.Erläuterung:
quelle
I~]{n.{:V}{;V}?}d
. Ich frage mich, obd
ich den Wert einfach auf den Stapel legen soll, anstattn
...-42
, aber sie fügt Klammern um die Ausgabe hinzu.R
393733 BytesDies ist eine unbenannte Funktion, die einen Vektor akzeptiert und einen Vektor zurückgibt. Das
zoo
Paket muss installiert sein. Beachten Sie, dass es nichtzoo
an den Namespace angehängt werden muss, da wir direkt darauf verweisen.Der Name für diese Operation in der Welt der Statistik lautet LOCF-Imputation, wobei LOCF für Last Observation Carried Forward steht. Um dies in R zu erreichen, können wir
na.locf
aus demzoo
Paket verwenden, dasNA
Werte durch den letzten bekannten Nicht-NA
Wert ersetzt. Wir müssen nur zuerst die Nullen in der Eingabe durchNA
s ersetzen .Dazu verwenden wir
x|NA
, wasTRUE
wannx != 0
undNA
ansonsten sein wird. Wenn wir dies mit multiplizierenx
, werden dieTRUE
Elemente durch die entsprechenden Elemente vonx
und derNA
s-Verbleib ersetztNA
, wodurch alle Nullen ersetzt werden. Dies wird dann weitergegeben,zoo::na.locf
was uns genau das gibt, was wir wollen.4 Bytes gespart dank flodel!
quelle
Rust, 100 Bytes
Stolperte über diese Herausforderung und dachte, ich würde es in meiner Lieblingssprache versuchen. Versucht
[T]::windows_mut()
zuerst mit, bevor herausgefunden wird, dass es nicht existiert . Und es könnte tatsächlich länger gewesen sein. Wie auch immer, es stellt sich heraus, dass Golf Rust sehr hässlich und nicht wettbewerbsfähig ist (besonders bei all diesen Esoterikern!) 1Die Newline ist nicht im bytecount enthalten. Es ist nur dort, damit Sie nicht seitwärts scrollen müssen. Es ändert nichts an der Bedeutung des Codes.
Ungolfed:
[1] Zumindest ist es nicht so schlimm wie Java.
quelle
public static void main
Kochfeld brauchen ...Milchstraße 1.2.1 , 33 Bytes
Dies setzt voraus, dass sich die Liste der Ganzzahlen ausschließlich auf dem Stapel befindet.
Erläuterung
quelle
Julia, 33 Bytes
Dies ist eine Funktion
g
, die ein Array akzeptiert und ein Array zurückgibt. Wir beginnen eine temporäre Variablea
bei 0. Wenn für jedes Elementi
der Eingabei
nicht 0 angegeben ist, weisen wira
zui
. Wenni
0 ist,a
ändert sich bei dieser Iteration nichts. Wir verwendena
als Wert an dieser Position im Ausgabearray.quelle
Perl 6 , 21 Bytes
Verwendungszweck:
quelle
R, 36 Bytes
Mal sehen, wie das mit funktioniert
x=
als Beispiel. Hier
!!x
wird der logische (Richtig / Falsch) Vektor sein:Außerdem
seq(a=x)
gibt einen Vektor von Indizes, solangex
:Wir multiplizieren beide und geben:
Wir nehmen das kumulative Maximum:
Schließlich verwenden wir diesen letzten Vektor als Index, um aus Folgendem zu extrahieren
x
:quelle
CJam, 11 Bytes
Probieren Sie es online aus.
Wie es funktioniert
quelle
Powershell, 32 Bytes
$x|%{...}
Blockiert das Skript für jedes Element in$x
.($_,$t)
ist ein Array des aktuellen Elements und$t
und[!$_]
bedeutet, dass wir es verwenden,!$_
um in das Array zu indexieren. Der Index ist0
(false) für Elemente ungleich Null und1
(true), wenn das aktuelle Element Null ist. Dies gilt$t
entweder für das aktuelle Element oder$t
. Die Klammern umgeben den Zuweisungsausdruck, sodass sein Wert ausgegeben wird. Ohne Klammern wäre es nur eine "leise" Aufgabe$t
.quelle
param($x)
was dies in ein Programm verwandelt. Die Ausgabe ist eine Sammlung von Ganzzahlen, die Sie als Parameter an das Programm übergeben können, z. B.$a = .\program.ps1 1,2,3,4,0,0,5
und die dann.\program.ps1 $a
wie erwartet funktionieren.$args|%{($p=($_,$p)[!$_])}
- 26 Bytes mit $ args.Japt , 3 Bytes
Versuch es
quelle