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]
code-golf
array-manipulation
FryAmTheEggman
źródło
źródło
[0,0]
?[1,01]
? Korzystając z odpowiedzi Pyth issac, porównaj to i to .01
nie 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źOdpowiedzi:
Pyth, 6 bajtów
Demonstracja
m ... Q
oznacza, że mapuje funkcję na wejściu. Mapowana funkcja toJ|dJ
. Oznacza toJ = d or J
w Pythonie, ponieważJ
implikacja 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.źródło
Galaretka , niekonkurująca
3 bajty Ta odpowiedź nie jest konkurencyjna, ponieważ wykorzystuje funkcje, które datują wyzwanie.
Wypróbuj online!
Jak to działa
źródło
Rubin, 25 bajtów
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) - powiedzmylety
- musiałbym zadeklarować ją pozamap
(ponieważy=x
miałby tylko zakres wewnątrz tej pojedynczejmap
iteracji). To zużyłoby cztery znaki więcej (y=0;
).Ale jeśli
a
użyję nazwy zmiennej ... tak, zgadłeś. Właściwie zmieniam przypisanie do argumentu, który otrzymaliśmy jako dane wejściowe (tablica oryginalna).map
nie obchodzi go to, ponieważ dba tylko o oryginalną wartość rzeczy, do której jest wywoływany, więc to faktycznie działa.źródło
Haskell, 21 bajtów
(Anonimowa) funkcja, którą wykonujemy, znajduje się w ostatnim wierszu. Pierwsze dwa wiersze definiują funkcję pomocnika.
Funkcja binarna
%
wyprowadza drugi argument, chyba że jest0
, w takim przypadku zamiast tego wyprowadza pierwszy argument.scanl1
iteruje tę funkcję po liście danych wejściowych, generując wynik na każdym kroku.źródło
J, 8 bajtów
Jest to jednoargumentowa funkcja wywoływana w następujący sposób.
Wyjaśnienie
źródło
{:@(#~|)\
jeden bajt dłużej.Sed, 8
/^0$/
dopasowuje zero w linii - jeśli tak, tog
kopiuje przestrzeń wstrzymania do przestrzeni wzorówh
kopiuje przestrzeń wzoru do przestrzeni wstrzymaniaLiczby całkowite są oddzielone znakiem nowej linii. na przykład:
źródło
JavaScript ES6, 19 bajtów
Proste rozwiązanie pętli wejściu, przypisać
p
do bieżącego elementui
lubp
, jeślii
jest0
i wyprowadzać go.Przykład uruchomienia (przypisanie funkcji anonimowej
f
):źródło
Siatkówka , 15 bajtów
Wypróbuj online.
Wielokrotnie zastępuje liczbę, po której następuje zero, dwukrotnością tej liczby, aż łańcuch przestanie się zmieniać.
źródło
Dyalog APL,
12109 bajtówZainspirowany odpowiedzią J. Zgarba.
Wypróbuj tutaj .
źródło
Pyth, 8 bajtów
Używa
.u
(redukcja skumulowana) przez|
(Pythonor
), z przypadkiem podstawowym 0.źródło
.u
jest już nawet jeśliJ
iK
są związani. Czy to jest kiedykolwiek optymalne?Python 2, 29 bajtów
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
, zmiennax
jest aktualizowana na wejściu, chyba że wejście to 0 (co oznacza Falsey), w którym to przypadku pozostaje aktualną wartością. Następniex
jest drukowany. Zauważ, że ponieważ pierwsza wartość listy jest niezerowa,x
nie jest obliczana po prawej stronie przed jej przypisaniem.źródło
#\nJ|EJ
Matematyka 38 bajtów
Dopasowywanie wzorców wielokrotnie zastępuje
...a,0,...
się...a,a...
źródło
Matlab, 41
46bajtówJest to inspirowane moją pierwotną odpowiedzią , z następującymi różnicami:
nonzeros
.0
.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.
Przykład:
źródło
x=input('')
zamiast deklaracji funkcji idisp(u(t)
zamiasty=
bitu. Ponadto możesz zaoszczędzić cztery kolejne bajty, pozbywając sięt
zmiennej, uzyskującx=input('');u=x(~~x);disp(u(cumsum(~~x)))
41.@(x)x(~~x)(cumsum(~~x))
pracuje w Octave.Gol> <> , 8 bajtów
Dane wejściowe i wyjściowe są liczbami oddzielonymi znakiem nowej linii.
Wyjaśnienie:
Wypróbuj online tutaj.
źródło
Japt,
87 bajtówDość proste. Pobiera dane wejściowe oddzielone przecinkami. Wypróbuj online!
Bez golfa i wyjaśnienia
Niekonkurencyjna 4-bajtowa wersja: (
å
komenda i!
funkcja -auto dodane po wyzwaniu)Wyjaśnienie:
Wypróbuj online!
źródło
ª
jest OR, czy nieº
? Czyº
AND jest przypadkiem?º
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 ...Java, 78
Tutaj po prostu śledzimy ostatnie niezerowe i wprowadzamy je tam, gdzie jest to właściwe. Wydaje się, że to oczywisty sposób.
źródło
Prolog (SWI) , 54 bajty
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ń.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:
Wypróbuj online!
źródło
GolfScript, 10 bajtów
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:
Oczywiście, jeśli policzone zostanie tylko ciało funkcji (tj.
[{1$or}*]
), Wtedy mogę zapisać jeden bajt w porównaniu do programu autonomicznego.źródło
Minkolang 0,14 ,
1210 bajtówWypróbuj tutaj. Dane wejściowe można podać jak w pytaniu, ale bez nawiasów .
Wyjaśnienie
Minkolang jest toroidalny, więc zapętla się do początku i kontynuuje, dopóki nie trafi w
.
i zatrzyma się.źródło
𝔼𝕊𝕄𝕚𝕟, 7 znaków / 12 bajtów
Try it here (Firefox only).
Wyjaśnienie
źródło
O , 31 bajtów
Pobiera to dane wejściowe oddzielone
,
i wyświetla tę samą listę w[]
.Wyjaśnienie:
17 bajtów
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
_
.Wyjaśnienie:
źródło
I~]{n.{:V}{;V}?}d
. Zastanawiam się, czyd
powinienem po prostu umieścić wartość na stosie zamiastn
...-42
, ale dodaje nawiasy kwadratowe wokół wyniku.R,
393733 bajtówJest to nienazwana funkcja, która przyjmuje wektor i zwraca wektor. Wymaga zainstalowania
zoo
pakietu. Pamiętaj, że nie wymagazoo
dołą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.locf
zzoo
pakietu, który zastępujeNA
wartości z ostatniej znanej nieprzestrzeganiaNA
wartości. Musimy po prostu zastąpić zera na wejściuNA
s.Aby to zrobić, używamy
x|NA
, co będzie,TRUE
kiedyx != 0
i gdzieNA
indziej. Jeśli pomnożymy to przezx
,TRUE
elementy zostaną zastąpione przez odpowiednie elementyx
iNA
s pozostająNA
, zastępując w ten sposób wszystkie zera. To jest następnie przekazywane,zoo::na.locf
co daje nam dokładnie to, czego chcemy.Zaoszczędź 4 bajty dzięki flodel!
źródło
Rdza, 100 bajtów
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!) 1Nowa linia nie jest uwzględniona w bajtecount; jest tylko tam, więc nie musisz przewijać w bok. Nie zmienia to znaczenia kodu.
Nie golfowany:
[1] Przynajmniej nie jest tak zły jak Java.
źródło
public static void main
płyty…Droga Mleczna 1.2.1 , 33 bajtów
Zakłada się, że lista liczb całkowitych znajduje się wyłącznie na stosie.
Wyjaśnienie
źródło
Julia, 33 bajty
Ta funkcja
g
przyjmuje tablicę i zwraca tablicę. Zaczynamy tymczasową zmiennąa
od 0. Dla każdego elementui
danych wejściowych, jeślii
nie jest 0, to przypisujemya
doi
. Jeślii
wynosi 0,a
nie zmienia się w tej iteracji. Używamya
jako wartości w tej pozycji w tablicy wyjściowej.źródło
Perl 6 , 21 bajtów
stosowanie:
źródło
R, 36 bajtów
Zobaczmy, jak to działa przy użyciu
x=
jako przykład. Tutaj
!!x
będzie logiczny wektor (prawda / fałsz):Ponadto,
seq(a=x)
daje wektor wskaźników, o ilex
:Mnożymy oba, dając:
Przyjmujemy skumulowane maksimum:
Wreszcie używamy tego ostatniego wektora jako wskaźników do wyodrębnienia
x
:źródło
CJam, 11 bajtów
Wypróbuj online.
Jak to działa
źródło
PowerShell, 32 bajty
$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 i1
(true), gdy bieżący element będzie wynosił zero, więc$t
bę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
.źródło
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,5
A następnie.\program.ps1 $a
działa zgodnie z oczekiwaniami.$args|%{($p=($_,$p)[!$_])}
- 26 bajtów przy użyciu $ args.Japt , 3 bajty
Spróbuj
źródło