Ukryj zera na liście

41

Zainspirowany tym pytaniem SO

Jako dane wejściowe otrzymasz niepustą listę liczb całkowitych, gdzie pierwsza wartość jest niezerowa. Aby skonstruować dane wyjściowe, przejdź od początku listy, wypisując po drodze każdą niezerową wartość. Gdy napotkasz zero, powtórz wartość dodaną ostatnio do wyniku.

Możesz napisać program lub funkcję i mieć wejście / wyjście w dowolnym dogodnym formacie, który nie koduje dodatkowych informacji, o ile nadal jest uporządkowaną sekwencją liczb całkowitych. W przypadku wypisywania z programu możesz wydrukować końcowy znak nowej linii. Poza tym końcowym znakiem nowej linii, dane wyjściowe powinny stanowić akceptowalny wkład do przesłania.

Najkrótszy kod w bajtach wygrywa.

Przypadki testowe

[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]
FryAmTheEggman
źródło
21
Trochę ciekawostek: nazwa tej operacji w świecie statystyki to imputacja LOCF (ostatnia przeniesiona obserwacja).
Alex A.,
Co się stanie, jeśli dane wejściowe były [0,0]?
Kritixi Lithos,
4
@ KριτικσιΛίθος "... gdzie pierwsza wartość jest niezerowa"
Sp3000
Co jeśli wejście jest [1,01]? Korzystając z odpowiedzi Pyth issac, porównaj to i to .
Arcturus,
@Eridan 01nie jest prawidłową liczbą całkowitą w danych wejściowych Pyth, więc isaac nie musi tego uwzględniać. Inne odpowiedzi mogą zaakceptować takie dane wejściowe, jeśli chcą, pod warunkiem, że są spójne (np. W jaki sposób odpowiedź
isaaca

Odpowiedzi:

19

Pyth, 6 bajtów

mJ|dJQ

Demonstracja

m ... Qoznacza, że ​​mapuje funkcję na wejściu. Mapowana funkcja to J|dJ. Oznacza to J = d or Jw Pythonie, ponieważ Jimplikacja jest przypisywana do następującej wartości przy pierwszym użyciu. W przeciwieństwie do Pythona, wyrażenia przypisania zwracają wartość przypisaną w Pyth, więc mapa zwraca każdą kolejną wartość J, zależnie od potrzeb.

isaacg
źródło
23

Galaretka , niekonkurująca

3 bajty Ta odpowiedź nie jest konkurencyjna, ponieważ wykorzystuje funkcje, które datują wyzwanie.

o@\

Wypróbuj online!

Jak to działa

o      Take the logical OR of its arguments.
 @     Reverse the argument order of the link to the left.
  \    Do a cumulative reduce, using the link to the left.
Dennis
źródło
6
Mój mózg nie może pojąć ... Dennis w końcu znalazł sposób, aby na stałe zagrać w golfa. Jakby już tego nie zrobił. ಠ_ಠ
Addison Crump
1
Wyjaśnienie nie jest już zgodne z programem
kwintopia
18

Rubin, 25 bajtów

->a{a.map{|x|x==0?a:a=x}}

To jest naprawdę naprawdę złe.

W szczególności fragment kodu x==0 ? a : (a=x).

Gdybym użył innej nazwy zmiennej dla a(poprzedniej niezerowej wartości) - powiedzmylet y- musiałbym zadeklarować ją poza map(ponieważ y=xmiałby tylko zakres wewnątrz tej pojedynczej mapiteracji). To zużyłoby cztery znaki więcej ( y=0;).

Ale jeśli aużyję nazwy zmiennej ... tak, zgadłeś. Właściwie zmieniam przypisanie do argumentu, który otrzymaliśmy jako dane wejściowe (tablica oryginalna).

mapnie obchodzi go to, ponieważ dba tylko o oryginalną wartość rzeczy, do której jest wywoływany, więc to faktycznie działa.

Klamka
źródło
17

Haskell, 21 bajtów

a%0=a
a%b=b
scanl1(%)

(Anonimowa) funkcja, którą wykonujemy, znajduje się w ostatnim wierszu. Pierwsze dwa wiersze definiują funkcję pomocnika.

scanl1(%) [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]

Funkcja binarna %wyprowadza drugi argument, chyba że jest 0, w takim przypadku zamiast tego wyprowadza pierwszy argument. scanl1iteruje tę funkcję po liście danych wejściowych, generując wynik na każdym kroku.

xnor
źródło
13

J, 8 bajtów

{:@-.&0\

Jest to jednoargumentowa funkcja wywoływana w następujący sposób.

   f =: {:@-.&0\
   f 2 0 0 4 0 _1 0
2 2 2 4 4 _1 _1

Wyjaśnienie

{:@-.&0\
       \  Map over non-empty prefixes:
   -.      remove all occurrences
     &0    of the number 0 and
{:@        take the last element.
Zgarb
źródło
Czy można zreplikować według wartości bezwzględnej zamiast usuwać zera?
lirtosiast
@ThomasKwa To była moja pierwsza próba. Jest o {:@(#~|)\jeden bajt dłużej.
Zgarb,
13

Sed, 8

/^0$/g
h
  • /^0$/dopasowuje zero w linii - jeśli tak, to gkopiuje przestrzeń wstrzymania do przestrzeni wzorów
  • h kopiuje przestrzeń wzoru do przestrzeni wstrzymania

Liczby całkowite są oddzielone znakiem nowej linii. na przykład:

$ printf -- "-1\n0\n5\n0\n0\n7\n" | sed -f zerocover.sed
-1
-1
5
5
5
7
$ 
Cyfrowa trauma
źródło
11

JavaScript ES6, 19 bajtów

s=>s.map(i=>p=i||p)

Proste rozwiązanie pętli wejściu, przypisać pdo bieżącego elementu ilub p, jeśli ijest 0i wyprowadzać go.

Przykład uruchomienia (przypisanie funkcji anonimowej f):

>> f([1, 0, 2, 0, 7, 7, 7, 0, 5, 0, 0, 0, 9])
<< Array [1, 1, 2, 2, 7, 7, 7, 7, 5, 5, 5, 5, 9]
Dendrobium
źródło
Ilekroć uruchamiam to,
pojawia
@Downgoat To dlatego, że interpreter jest tłumaczem wyłącznie w trybie ścisłym. Jeśli nie uruchomisz tego kodu w trybie ścisłym, powinien on działać.
wizzwizz4
@ wizzwizz4 ohh, r ok
Downgoat
1
@ wizzwizz4 Tryb ścisły jest głupiutki.
SuperJedi224,
1
@ SuperJedi224 To nie jest głupie. To jest bardzo użyteczne; upewnia się, że Twój kod nie jest niejednoznaczny i będzie działał nawet przy dużej aktualizacji, i nie będzie używać niezdefiniowanego zachowania itp. Ale głupie jest to, że domyślnie jest ono włączone, ponieważ tryb ścisły nie określa sposobu wyłączenia się , a jeśli nie umieścisz ciągu trybu ścisłego na początku, nie chcesz go i / lub grasz w golfa.
wizzwizz4,
7

Siatkówka , 15 bajtów

+`(\S+) 0
$1 $1

Wypróbuj online.

Wielokrotnie zastępuje liczbę, po której następuje zero, dwukrotnością tej liczby, aż łańcuch przestanie się zmieniać.

Martin Ender
źródło
7

Dyalog APL, 12 10 9 bajtów

(⊃0~⍨,⍨)\

Zainspirowany odpowiedzią J. Zgarba.

(⊃0~⍨,⍨)\      Monadic function:
        \      Cumulative reduce by
(⊃0~⍨,⍨)       the dyadic function:
     ,⍨           Arguments concatenated in reverse order
  0~⍨             With zeroes removed
 ⊃                Take the first element

Wypróbuj tutaj .

lirtosiast
źródło
6

Pyth, 8 bajtów

t.u|YNQ0

Używa .u(redukcja skumulowana) przez |(Python or), z przypadkiem podstawowym 0.

lirtosiast
źródło
@isaacg Wydaje się, że .ujest już nawet jeśli Ji Ksą związani. Czy to jest kiedykolwiek optymalne?
lirtosiast
To było (przynajmniej afaik) tutaj . Zwykle pomaga, gdy z jakiegoś powodu chcesz uzyskać wszystkie wyniki.
FryAmTheEggman,
5

Python 2, 29 bajtów

while 1:x=input()or x;print x

Pobiera dane wejściowe jako liczby podane po jednym w wierszu i wysyła dane w tym samym formacie. Kończy się z błędem po zakończeniu.

Używając zwarcia or, zmienna xjest aktualizowana na wejściu, chyba że wejście to 0 (co oznacza Falsey), w którym to przypadku pozostaje aktualną wartością. Następnie xjest drukowany. Zauważ, że ponieważ pierwsza wartość listy jest niezerowa, xnie jest obliczana po prawej stronie przed jej przypisaniem.

xnor
źródło
Jest to 6 bajtów w Pyth i pomija błąd:#\nJ|EJ
isaacg
5

Matematyka 38 bajtów

Dopasowywanie wzorców wielokrotnie zastępuje ...a,0,...się...a,a...

#//.{b___,a_/;a!=0,0,e___}:>{b,a,a,e}&
DavidC
źródło
5

Matlab, 41 46 bajtów

Jest to inspirowane moją pierwotną odpowiedzią , z następującymi różnicami:

  1. Zamiast tego użyj indeksowania logicznego nonzeros.
  2. Podwójna logiczna negacja zamiast porównywania 0.
  3. Transpozycję można usunąć, ponieważ format wyjściowy jest elastyczny
  4. Usuwanie zmiennej pośredniej.

Podziękowania dla Toma Carpentera za punkt 4 i za jego sugestię użycia programu zamiast funkcji; razem pozwoliły one na zmniejszenie o 5 bajtów.

x=input('');u=x(~~x);disp(u(cumsum(~~x)))

Przykład:

>> x=input('');u=x(~~x);disp(u(cumsum(~~x)))
[4 0 3 2 0 5 6 0]
     4     4     3     2     2     5     6     6
Luis Mendo
źródło
Możesz zapisać jeden bajt, konwertując go do programu - użyj x=input('')zamiast deklaracji funkcji i disp(u(t)zamiast y=bitu. Ponadto możesz zaoszczędzić cztery kolejne bajty, pozbywając się tzmiennej, uzyskując x=input('');u=x(~~x);disp(u(cumsum(~~x)))41.
Tom Carpenter
@TomCarpenter Wielkie dzięki! Edytowane
Luis Mendo,
Nie mam Matlaba, ale @(x)x(~~x)(cumsum(~~x))pracuje w Octave.
alephalpha
@alephalpha Matlab nie pozwala na iterowane indeksowanie.
AlexR
5

Gol> <> , 8 bajtów

IE;:Z~:N

Dane wejściowe i wyjściowe są liczbami oddzielonymi znakiem nowej linii.

Wyjaśnienie:

I         push next integer to stack
 E;       halt if EOF
   :Z~    remove top stack element if 0
      :N  print top stack element while also keeping it on the stack
          wrap around code implicitly

Wypróbuj online tutaj.

randomra
źródło
5

Japt, 8 7 bajtów

N£U=XªU

Dość proste. Pobiera dane wejściowe oddzielone przecinkami. Wypróbuj online!

Bez golfa i wyjaśnienia

N£    U=Xª U
NmXYZ{U=X||U

        // Implicit: N = input, U = first item
NmXYZ{  // Map each item X to:
U=Z||U  //  Set U to (X || U) and return.
        //  If X is non-zero, this sets U to X.
        //  Otherwise, this leaves U as the last non-zero we've encountered.
        // Implicit: output last expression

Niekonkurencyjna 4-bajtowa wersja: ( åkomenda i !funkcja -auto dodane po wyzwaniu)

Nå!ª

Wyjaśnienie:

Nå!ª
Nå!||
NåXY{Y||X}

        // Implicit: N = input, U = first item
NåXY{   // Cumulatively reduce N; take each item Y and prev value X,
Y||X}   //  and return Y if it is non-zero; return X otherwise.
        // Implicit: output last expression

Wypróbuj online!

ETHprodukcje
źródło
Czekaj, czy ªjest OR, czy nie º? Czy ºAND jest przypadkiem?
caird coinheringaahing
@cairdcoinheringaahing Nope, ºis ((. Zostały one przypisane według wartości Unicode, ponieważ uznałem, że jest to potrzebne: Pd ªi ºr są genialne, ale mogę użyć tego dla Japt 2.0 ...
ETHproductions
5

Java, 78

int[]f(int[]a){for(int i=-1,b=i;++i<a.length;a[i]=b=a[i]==0?b:a[i]);return a;}

Tutaj po prostu śledzimy ostatnie niezerowe i wprowadzamy je tam, gdzie jest to właściwe. Wydaje się, że to oczywisty sposób.

Geobity
źródło
5

Prolog (SWI) , 54 bajty

[X,0|T]+[X,X|Y]:-[X|T]+[X|Y].
[X|T]+[X|Y]:-T+Y.
[]+[].

Wypróbuj online!

Wyjaśnienie

Jestem bardzo zadowolony z tej odpowiedzi.

Najpierw mówimy, że pusta lista jest rozwiązaniem pustej listy:

[]+[].

Mówimy wtedy, że [X,X|Y]jest to rozwiązanie [X,0|T], jeśli poprzez usunięcie drugiego wpisu każdego z pozostałych rozwiązań.

[X,0|T]+[X,X|Y]:-[X|T]+[X|Y].

Na koniec mówimy, że wszystko, co zostało, jest ważne, jeśli zaczynają się od tej samej wartości, a reszta z dwóch list jest do siebie zgodna.

Jeśli to wyjaśnienie nie działa tutaj, kod jest tłumaczony na Haskell:

g(a:0:x)=a:g(a:x)
g(a:x)=a:g x
g x=x

Wypróbuj online!

Kreator pszenicy
źródło
Bardzo zwięzłe! Podoba mi się, jak niektóre funkcjonalne i logiczne języki programowania pozwalają na tak dosłowne tłumaczenie reguł. To taki naturalny sposób na napisanie tego!
ThePlasmaRailgun
4

GolfScript, 10 bajtów

~{1$or}*]`

Ten program pobiera dane wejściowe ze stdin w postaci literału tablicy GolfScript (np. [1 0 2 0]) I zapisuje dane wyjściowe na stdout w tym samym formacie (np [1 1 2 2].).

Wypróbuj online.

Funkcja (przyjmująca i zwracająca tablicę GolfScript) byłaby o trzy bajty dłuższa, ze względu na konieczność zawinięcia jej w blok i przypisania jej do symbolu:

{[{1$or}*]}:f

Oczywiście, jeśli policzone zostanie tylko ciało funkcji (tj. [{1$or}*]), Wtedy mogę zapisać jeden bajt w porównaniu do programu autonomicznego.

Ilmari Karonen
źródło
Być może nic dziwnego, że nowa, krótsza wersja okazała się bardzo podobna do wpisu Dennisa w CJam . Wygrywa o jeden bajt, ponieważ GolfScript automatycznie odczytuje dane wejściowe, a zatem nie potrzebuje do tego dodatkowych poleceń.
Ilmari Karonen,
4

Minkolang 0,14 , 12 10 bajtów

$I?.nd?xdN

Wypróbuj tutaj. Dane wejściowe można podać jak w pytaniu, ale bez nawiasów .

Wyjaśnienie

$I      Push the length of the input on the stack.
  ?.    If this is 0, stop. Otherwise, continue.

nd        Take number from input and duplicate it.
  ?x      If this number is 0, dump the top of stack.
    dN    Duplicate the top of stack and output as number

Minkolang jest toroidalny, więc zapętla się do początku i kontynuuje, dopóki nie trafi w .i zatrzyma się.

El'endia Starman
źródło
4

𝔼𝕊𝕄𝕚𝕟, 7 znaków / 12 bajtów

ïⓜa=$⋎a

Try it here (Firefox only).

Wyjaśnienie

        // implicit: ï = input array
ïⓜ     // map over input
  a=    // set a to:
    $   // (if element is truthy (not 0)) element itself
     ⋎a // else whatever a was set to before
        // implicit output
Mama Fun Roll
źródło
4

O , 31 bajtów

[[I',T%T/]{n#}d]{n.{:V}{;V}?}d]

Pobiera to dane wejściowe oddzielone ,i wyświetla tę samą listę w [].

7,0,3,0,0,2,-50,0,0 => [7,7,3,3,3,2,-50,-50,-50]

Wyjaśnienie:

[] Umieść wynik w tablicy
 [I ', T% T /] {n #} d] Sformatuj dane wejściowe w tablicy liczb
                {n. {: V} {; V}?} d Wpisz zera (jak to działa poniżej)


17 bajtów

I~]{n.{:V}{;V}?}d

Pobiera dane wejściowe jako listę liczb oddzielonych spacjami za pomocą notacji postfiksowej i może obsługiwać tylko jednocyfrowe liczby szesnastkowe. Negatywy są postfiksowane _.

5 4 0 0 1 0 0 => 5 4 4 4 1 1 1
A 3 0 0 1 B 0 => 10 3 3 3 1 11 11
67* 0 0 78* 0 => 42 42 42 56 56
67*_ 4 3_ 0 0 => -42 4 -3 -3 -3

Wyjaśnienie:

I ~] Umieszcza dane wejściowe w tablicy liczb całkowitych
   {} d Dla każdej liczby na wejściu
    n. {; V} {: V}? Jeśli liczba wynosi 0, naciśnij V.
                  Jeśli nie, ustaw V na liczbę
faza
źródło
Możesz zapisać dwa bajty za pomocą I~]{n.{:V}{;V}?}d. Zastanawiam się, czy dpowinienem po prostu umieścić wartość na stosie zamiast n...
kirbyfan64sos
Czy jesteś pewien, że O sobie z tym poradzi? Nie mogę znaleźć sposobu na przekazanie go -42, spełniając wymóg „Twój wynik powinien być akceptowalnym wkładem do przesłania”.
manatwork,
@manatwork Mam teraz lepszą wersję, która działa -42, ale dodaje nawiasy kwadratowe wokół wyniku.
faza
4

R, 39 37 33 bajtów

function(x)zoo::na.locf(x*(x|NA))

Jest to nienazwana funkcja, która przyjmuje wektor i zwraca wektor. Wymaga zainstalowania zoopakietu. Pamiętaj, że nie wymaga zoodołączenia do przestrzeni nazw, ponieważ odwołujemy się do niej bezpośrednio.

Nazwą tej operacji w świecie statystyki jest imputacja LOCF, gdzie LOCF oznacza ostatnią obserwację przeprowadzoną. Aby to osiągnąć w R, możemy skorzystać na.locfz zoopakietu, który zastępuje NAwartości z ostatniej znanej nieprzestrzegania NAwartości. Musimy po prostu zastąpić zera na wejściu NAs.

Aby to zrobić, używamy x|NA, co będzie, TRUEkiedy x != 0i gdzie NAindziej. Jeśli pomnożymy to przez x, TRUEelementy zostaną zastąpione przez odpowiednie elementy xi NAs pozostają NA, zastępując w ten sposób wszystkie zera. To jest następnie przekazywane, zoo::na.locfco daje nam dokładnie to, czego chcemy.

Zaoszczędź 4 bajty dzięki flodel!

Alex A.
źródło
4

Rdza, 100 bajtów

fn f(i:&[i64])->Vec<i64>{let(mut o,mut l)=(i.to_vec(),0);
for x in&mut o{if *x==0{*x=l}else{l=*x}};o}

Natknąłem się na to wyzwanie, pomyślałem, że spróbuję w moim ulubionym języku. [T]::windows_mut()Najpierw spróbowałem użyć , zanim dowiesz się, że nie istnieje . I mogło być tak naprawdę dłużej. W każdym razie okazuje się, że gra w golfa w Rust jest bardzo brzydka i bardzo niekonkurencyjna (szczególnie z tymi wszystkimi cholernymi ezoterycznymi!) 1

Nowa linia nie jest uwzględniona w bajtecount; jest tylko tam, więc nie musisz przewijać w bok. Nie zmienia to znaczenia kodu.

Nie golfowany:

fn cover_zeroes(input: &[i64]) -> Vec<i64> {
    let mut output = input.to_vec();
    let mut last_nonzero = 0;
    for item in &mut output {
        if *item == 0 {
            *item = last_nonzero;
        }
        else {
            last_nonzero = *item;
        }
    }
    output
}

[1] Przynajmniej nie jest tak zły jak Java.

Blacklight Shining
źródło
7
Przynajmniej nie jest tak źle jak Java ”? Ahem ... ;)
Geobits,
1
@Geobits Och, racja. Liczyłem na to, że potrzebujesz tej public static void mainpłyty…
Blacklight Shining
3

Droga Mleczna 1.2.1 , 33 bajtów

:y;=<:&{~<?{0b_^;:3≤_;}1-}^<Ω!

Zakłada się, że lista liczb całkowitych znajduje się wyłącznie na stosie.


Wyjaśnienie

:    : :           :              # duplicate the TOS
 y                                # push the length of the TOS
  ;               ;    ;          # swap the TOS and STOS
   =                              # dump a list to the stack
    < <    <                 <    # rotate the stack leftward
        &{~                }      # while loop
            ?{  _     _ }         # if-else statements
              0     3    1        # push an integer
               b                  # == on the TOS and STOS
                 ^          ^     # pop the TOS without output
                     ≤            # rotate the top N stack elements leftward
                          -       # subtract the TOS from the STOS
                              Ω   # push a list made of the top N stack elements
                               !  # output the TOS
Zach Gates
źródło
Jestem pewien, że TOS i STOS oznaczają Top of Stack i Second-to-Top of Stack, prawda?
Addison Crump,
Tak @FlagAsSpam
Zach Gates
3

Julia, 33 bajty

g(x,a=0)=[(i!=0&&(a=i);a)for i=x]

Ta funkcja gprzyjmuje tablicę i zwraca tablicę. Zaczynamy tymczasową zmienną aod 0. Dla każdego elementu idanych wejściowych, jeśli inie jest 0, to przypisujemy ado i. Jeśli iwynosi 0, anie zmienia się w tej iteracji. Używamy ajako wartości w tej pozycji w tablicy wyjściowej.

Alex A.
źródło
3

Perl 6 , 21 bajtów

*.map: {$_=($^a||$_)}

stosowanie:

# store the Whatever lambda as a subroutine
# just so that we don't have to repeat it
my &code = *.map: {$_=($^a||$_)}

say code [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)

say [-1, 0, 5, 0, 0, -7].&code;
# (-1 -1 5 5 5 -7)

say ([1, 0, 0, 0, 0, 0],[-1, 0, 5, 0, 0, -7]).map: &code;
# ((1 1 1 1 1 1) (-1 -1 5 5 5 -7))
Brad Gilbert b2gills
źródło
3

R, 36 bajtów

function(x)x[cummax(seq(a=x)*(!!x))]

Zobaczmy, jak to działa przy użyciu x=

c(1, 0, 2, 0, 7, 7, 7, 0, 5, 0, 0, 0, 9)

jako przykład. Tutaj !!xbędzie logiczny wektor (prawda / fałsz):

c(T, F, T, F, T, T, T, F, T, F, F, F, T)

Ponadto, seq(a=x)daje wektor wskaźników, o ile x:

c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)

Mnożymy oba, dając:

c(1, 0, 3, 0, 5, 6, 7, 0, 9, 0, 0, 0, 13)

Przyjmujemy skumulowane maksimum:

c(1, 1, 3, 3, 5, 6, 7, 7, 9, 9, 9, 9, 13)

Wreszcie używamy tego ostatniego wektora jako wskaźników do wyodrębnienia x:

c(1, 1, 2, 2, 7, 7, 7, 7, 5, 5, 5, 5, 9)
flodel
źródło
3

CJam, 11 bajtów

q~{1$e|}*]p

Wypróbuj online.

Jak to działa

q~             Read and evaluate all input.
  {    }*      Fold; for each element but the first:
   1$e|          Copy the previous element and take their logical OR.
         ]p   Wrap all results in an array and print it.
Dennis
źródło
3

PowerShell, 32 bajty

param($x)$x|%{($t=($_,$t)[!$_])}

$x|%{...}wykonuje blok skryptu dla każdego elementu w $x. ($_,$t)jest tablicą bieżącego elementu i $t, i [!$_]środków, które korzystają !$_z indeksem w tablicy. Indeks będzie miał wartość 0(false) dla niezerowych elementów i 1(true), gdy bieżący element będzie wynosił zero, więc $tbędzie to albo element bieżący, albo $t. Nawiasy otaczają wyrażenie przypisania, więc jego wartość jest emitowana. Bez nawiasów byłoby to po prostu „ciche” zadanie $t.

Danko Durbić
źródło
@ TimmyD, oczywiście masz rację. Dodałem, param($x)co zmienia to w program. Dane wyjściowe to zbiór liczb całkowitych, które można przesłać jako parametr do programu, np. $a = .\program.ps1 1,2,3,4,0,0,5A następnie .\program.ps1 $adziała zgodnie z oczekiwaniami.
Danko Durbić,
$args|%{($p=($_,$p)[!$_])}- 26 bajtów przy użyciu $ args.
TessellatingHeckler
3

Japt , 3 bajty

å!ª

Spróbuj

å!ª     :Implicit input of array
å       :Cumulatively reduce
 !      :Flip the arguments
  ª     :Logical OR
Kudłaty
źródło