Terinspirasi oleh pertanyaan SO ini
Sebagai input, Anda akan diberikan daftar bilangan bulat yang tidak kosong, di mana nilai pertama dijamin tidak nol. Untuk membangun output, berjalanlah dari awal daftar, mengeluarkan setiap nilai yang bukan nol di sepanjang jalan. Ketika Anda menemukan nol, ulangi nilai yang baru saja Anda tambahkan ke output.
Anda dapat menulis suatu program atau fungsi, dan meminta input / output mengambil format apa pun yang nyaman yang tidak mengkodekan informasi tambahan, selama masih merupakan urutan bilangan bulat yang dipesan. Jika mengeluarkan dari suatu program, Anda dapat mencetak baris tambahan. Kecuali untuk baris baru ini, output Anda harus menjadi input yang dapat diterima untuk kiriman Anda.
Kode terpendek dalam byte menang.
Uji Kasus
[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]
sumber
[0,0]
?[1,01]
? Menggunakan, Pyth jawaban issac, bandingkan ini dan ini .01
bukan bilangan bulat yang valid dalam input Pyth, jadi isaac tidak harus menjelaskannya. Jawaban lain dapat menerima input seperti itu jika mereka mau, selama mereka konsisten (seperti bagaimana jawaban isaac tidak akan pernah menghasilkan daftar itu sebagai output)Jawaban:
Pyth, 6 byte
Demonstrasi
m ... Q
berarti ini memetakan fungsi atas input. Fungsi yang dipetakan adalahJ|dJ
. Itu berartiJ = d or J
dalam Python, karenaJ
implikasi ditetapkan ke nilai berikut pada penggunaan pertama. Tidak seperti Python, ekspresi penugasan mengembalikan nilai yang ditetapkan dalam Pyth, sehingga peta mengembalikan setiap nilai berturut-turutJ
, seperti yang diinginkan.sumber
Jelly , tidak bersaing
3 byte Jawaban ini tidak bersaing, karena ia menggunakan fitur yang mengeposkan tantangan.
Cobalah online!
Bagaimana itu bekerja
sumber
Ruby, 25 byte
Ini sebenarnya sangat jahat.
Khususnya, cuplikan
x==0 ? a : (a=x)
.Jika saya menggunakan nama variabel lain untuk
a
(nilai bukan nol sebelumnya) —silakan katakanlahy
— saya harus mendeklarasikannya di luarmap
(karenay=x
hanya akan memiliki lingkup di dalammap
iterasi tunggal itu ). Itu akan menggunakan empat karakter lebih banyak (y=0;
).Tetapi jika saya menggunakan nama variabel
a
... ya, Anda dapat menebaknya. Saya sebenarnya menugaskan kembali argumen yang kami dapatkan sebagai input (array asli).map
tidak peduli karena hanya peduli tentang nilai asli dari hal yang sedang dipanggil, jadi ini benar-benar berfungsi.sumber
Haskell, 21 byte
Fungsi (anonim) yang kita buat ada di baris terakhir. Dua baris pertama mendefinisikan fungsi pembantu.
Fungsi biner
%
menghasilkan argumen kedua, kecuali itu0
, dalam hal ini ia menghasilkan argumen pertama.scanl1
iterates fungsi ini di atas daftar input, keluaran hasilnya pada setiap langkah.sumber
J, 8 byte
Ini adalah fungsi unary, dipanggil sebagai berikut.
Penjelasan
sumber
{:@(#~|)\
, jadi satu byte lebih lama.Sed, 8
/^0$/
cocok dengan nol pada garis - jika demikiang
salin ruang tunggu ke ruang polah
menyalin ruang pola ke ruang penahananInteger dipisahkan oleh baris baru. misalnya:
sumber
Javascript ES6, 19 byte
Solusi langsung, loop melalui input, tetapkan
p
ke elemen saat inii
ataup
jikai
ada0
dan output.Contoh jalankan (menugaskan fungsi anonim ke
f
):sumber
Retina , 15 byte
Cobalah online.
Berulang kali mengganti angka diikuti dengan nol dengan angka dua kali sampai string berhenti berubah.
sumber
Dyalog APL,
12109 byteTerinspirasi oleh jawaban J @ Zgarb.
Coba di sini .
sumber
Pyth, 8 byte
Penggunaan
.u
(pengurangan kumulatif) oleh|
(Pythonor
), dengan kasus dasar 0.sumber
.u
lebih lama bahkan jikaJ
danK
diikat. Apakah ini pernah optimal?Python 2, 29 byte
Mengambil input sebagai angka yang diberikan satu per baris, dan output dalam format yang sama. Berakhir dengan kesalahan setelah selesai.
Menggunakan sifat hubungan arus pendek
or
, variabelx
diperbarui ke input, kecuali jika input tersebut adalah 0 (yang merupakan Falsey), dalam hal ini tetap nilai saat ini. Kemudian,x
dicetak. Perhatikan bahwa karena nilai daftar pertama adalah bukan nol,x
tidak dievaluasi di sisi kanan sebelum ditugaskan.sumber
#\nJ|EJ
Mathematica 38 byte
Pencocokan pola berulang kali diganti
...a,0,...
dengan...a,a...
sumber
Matlab, 41
46byteIni terinspirasi dari jawaban awal saya , dengan perbedaan-perbedaan berikut:
nonzeros
.0
.Terima kasih kepada Tom Carpenter untuk item 4, dan untuk sarannya untuk menggunakan program alih-alih fungsi; bersama-sama ini memungkinkan pengurangan 5 byte.
Contoh:
sumber
x=input('')
alih-alih deklarasi fungsi, dandisp(u(t)
bukannyay=
bit. Juga, Anda dapat menyimpan empat byte lagi dengan menghilangkant
variabel, menghasilkanx=input('');u=x(~~x);disp(u(cumsum(~~x)))
41.@(x)x(~~x)(cumsum(~~x))
berfungsi di Octave.Gol> <> , 8 byte
Input dan output adalah angka yang dipisahkan oleh baris baru.
Penjelasan:
Cobalah online di sini.
sumber
Japt,
87 byteCukup mudah. Membawa input dipisahkan oleh koma. Cobalah online!
Tanpa penjelasan dan penjelasan
Versi 4-byte yang tidak bersaing : (
å
perintah dan!
-otomatis-fungsi ditambahkan setelah tantangan)Penjelasan:
Cobalah online!
sumber
ª
apakah ATAU, bukanº
? Apakahº
DAN kebetulan?º
adalah((
. Mereka ditugaskan oleh nilai Unicode ketika saya menemukan kebutuhan untuk mereka: Pª
nd danº
r jenius, saya mungkin menggunakannya untuk Japt 2.0 ...Jawa, 78
Di sini kita hanya melacak yang bukan nol terakhir dan mendorongnya jika perlu. Sepertinya cara yang jelas untuk melakukannya.
sumber
Prolog (SWI) , 54 byte
Cobalah online!
Penjelasan
Saya sangat senang dengan jawaban ini.
Pertama kita mengatakan bahwa daftar kosong adalah solusi dari daftar kosong:
Lalu kita katakan itu
[X,X|Y]
adalah solusi[X,0|T]
, jika dengan menghapus entri kedua dari masing-masing solusi yang tersisa.Terakhir kami katakan bahwa segala sesuatu yang tersisa valid jika mereka mulai dengan nilai yang sama dan sisa dari kedua daftar tersebut cocok satu sama lain.
Jika penjelasan itu tidak berhasil untuk Anda di sini adalah kode yang diterjemahkan ke dalam Haskell:
Cobalah online!
sumber
GolfScript, 10 byte
Program ini mengambil input dari stdin, dalam bentuk literal array GolfScript (misalnya
[1 0 2 0]
), dan menulis hasilnya ke stdout dalam format yang sama (misalnya[1 1 2 2]
).Cobalah online.
Fungsi (mengambil dan mengembalikan array GolfScript) akan menjadi tiga byte lebih lama, karena kebutuhan untuk membungkusnya dalam sebuah blok dan menetapkannya ke simbol:
Tentu saja, jika hanya fungsi tubuh (yaitu
[{1$or}*]
) dihitung, maka saya benar-benar dapat menyimpan satu byte dibandingkan dengan program yang berdiri sendiri.sumber
Minkolang 0,14 ,
1210 byteCoba di sini. Masukan dapat diberikan seperti pada pertanyaan, tetapi tanpa tanda kurung .
Penjelasan
Minkolang adalah toroidal, jadi ini berputar ke awal dan terus berjalan sampai menyentuh
.
dan berhenti.sumber
𝔼𝕊𝕄𝕚𝕟, 7 karakter / 12 byte
Try it here (Firefox only).
Penjelasan
sumber
O , 31 byte
Ini mengambil input yang dipisahkan oleh
,
dan menampilkan daftar yang sama di[]
.Penjelasan:
17 byte
Mengambil input sebagai daftar angka yang dipisahkan oleh spasi menggunakan notasi postfix dan hanya dapat menangani angka heksadesimal satu digit. Negatif adalah postfixed dengan
_
.Penjelasan:
sumber
I~]{n.{:V}{;V}?}d
. Saya ingin tahu apakahd
harus meletakkan nilai pada tumpukan alih-alihn
...-42
, tetapi menambahkan tanda kurung di sekitar output.R,
393733 byteIni adalah fungsi yang tidak disebutkan namanya yang menerima vektor dan mengembalikan vektor. Ini membutuhkan
zoo
paket yang harus diinstal. Perhatikan bahwa itu tidak perluzoo
dilampirkan ke namespace karena kami mereferensikannya secara langsung.Nama untuk operasi ini dalam dunia statistik adalah imputasi LOCF, di mana LOCF adalah singkatan dari Last Observation Carried Forward. Untuk mencapai hal ini dalam R, kita dapat menggunakan
na.locf
darizoo
paket, yang menggantikanNA
nilai-nilai dengan non-NA
nilai terakhir yang diketahui . Kami hanya perlu mengganti nol di input denganNA
s pertama.Untuk melakukan itu, kami menggunakan
x|NA
, yang akanTRUE
kapanx != 0
danNA
sebaliknya. Jika kita kalikan ini denganx
,TRUE
elemen digantikan oleh elemen yang sesuaix
danNA
tetapNA
, dengan demikian mengganti semua nol. Ini kemudian diteruskan kezoo::na.locf
yang memberi kita apa yang kita inginkan.Disimpan 4 byte berkat flodel!
sumber
Karat, 100 byte
Tersandung di tantangan ini, pikir saya akan mencobanya dalam bahasa favorit saya. Mencoba menggunakan
[T]::windows_mut()
pada awalnya, sebelum mengetahui bahwa itu tidak ada . Dan mungkin sebenarnya lebih lama dari ini. Pokoknya, ternyata golf Rust sangat jelek dan sangat tidak kompetitif (terutama dengan semua esoteris goshdarned!) 1Baris baru tidak termasuk dalam bytecount; hanya ada di sana sehingga Anda tidak perlu menggulir ke samping. Itu tidak mengubah arti kode.
Tidak Disatukan:
[1] Setidaknya itu tidak seburuk Jawa.
sumber
public static void main
pelat itu ...Bima Sakti 1.2.1 , 33 byte
Ini mengasumsikan bahwa daftar bilangan bulat hanya ada di tumpukan.
Penjelasan
sumber
Julia, 33 byte
Ini adalah fungsi
g
yang menerima array dan mengembalikan array. Kami memulai variabel sementaraa
pada 0. Untuk setiap elemeni
input, jikai
bukan 0 maka kami tetapkana
untuki
. Jikai
0,a
tidak berubah pada iterasi itu. Kami menggunakana
sebagai nilai di posisi itu di array output.sumber
Perl 6 , 21 byte
pemakaian:
sumber
R, 36 byte
Mari kita lihat bagaimana ini bekerja menggunakan
x=
sebagai contoh. Di sini,
!!x
akan menjadi vektor logis (Benar / Salah):Juga,
seq(a=x)
berikan vektor indeks selamax
:Kami mengalikan keduanya, memberi:
Kami mengambil maksimum kumulatif:
Akhirnya, kami menggunakan vektor terakhir sebagai indeks untuk mengekstrak dari
x
:sumber
CJam, 11 byte
Cobalah online.
Bagaimana itu bekerja
sumber
Powershell, 32 byte
$x|%{...}
apakah blok skrip untuk setiap elemen dalam$x
.($_,$t)
adalah array elemen saat ini dan$t
, dan[!$_]
artinya kita gunakan!$_
untuk mengindeks ke dalam array. Indeks akan menjadi0
(false) untuk elemen bukan nol dan1
(benar) ketika elemen saat ini adalah nol, sehingga$t
akan menjadi elemen saat ini atau$t
. Tanda kurung mengelilingi ekspresi penugasan sehingga nilainya dipancarkan. Tanpa parantheses itu hanya akan menjadi tugas "tenang" untuk$t
.sumber
param($x)
yang mengubah ini menjadi sebuah program. Outputnya adalah kumpulan bilangan bulat yang dapat Anda kirimkan sebagai parameter untuk program, misalnya$a = .\program.ps1 1,2,3,4,0,0,5
dan kemudian.\program.ps1 $a
berfungsi seperti yang diharapkan.$args|%{($p=($_,$p)[!$_])}
- 26 byte menggunakan $ args.Japt , 3 byte
Cobalah
sumber