Diberikan daftar / larik kosong yang hanya berisi bilangan bulat non-negatif seperti ini:
[0, 0, 0, 8, 1, 4, 3, 5, 6, 4, 1, 2, 0, 0, 0, 0]
Keluarkan daftar dengan trailing dan nol terkemuka dihapus
Output untuk ini adalah:
[8, 1, 4, 3, 5, 6, 4, 1, 2]
Beberapa test case lainnya:
[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]
Kode terpendek menang
code-golf
array-manipulation
Lamaro
sumber
sumber
Nil
()
/[]
slip()
/Empty
Any
{}
beberapa dari mereka tidak terdefinisi, beberapa didefinisikan tetapi tunggal, beberapa yang masuk ke daftar lain sehingga mereka tidak menambah jumlah elemen. (Ada banyak variasi berbedaAny
karena ada kelas / jenis dan peran)"0,4,1,2,0,1,2,4,0" => "4,1,2,0,1,2,4"
EDIT: Baru perhatikan banyak bahasa sudah melakukan ini.Jawaban:
Jelly , 2 byte
Kode:
Penjelasan:
Cobalah online!
sumber
JavaScript (ES6) 43
Kurang golf
Uji
sumber
f=(a,r=f(a,a))=>r.reverse().filter(x=>a|=x)
juga 43 byte.CJam, 13 byte
Dengan memasukkan array.
Versi yang lebih panjang:
sumber
Pyth, 4 byte
Demo:
Dari Pyth's
rev-doc.txt
:sumber
05AB1E , 4 byte
Kode:
Cobalah online!
Penjelasan:
Menggunakan pengodean CP-1252.
sumber
Retina, 12 byte
Linefeed tambahan sangat penting.
Terima kasih kepada @Martin Büttner dan @FryAmTheEggman karena telah menghemat beberapa byte.
Cobalah online
sumber
R, 43 byte
atau sebagai baca / tulis STDIN / STDOUT
Ini menemukan maksimum kumulatif dari string awal dan akhir (terbalik). The
&
Operator mengkonversi dua vektor ini untuk satu logis dari ukuran yang sama sepertix
, (nol akan selalu dikonversi keFALSE
dan segala sesuatu yang lain untukTRUE
), cara ini memungkinkan subset darix
sesuai dengan kondisi terpenuhi.sumber
Haskell , 29 byte
sumber
Mathematica
3427 byteIni berulang kali menerapkan aturan penggantian sampai tindakan tersebut gagal memberikan output baru. 7 byte disimpan berkat Alephalpha.
Aturan pertama menghapus nol di awal; aturan kedua menghapus nol di akhir array.
sumber
#//.{0,a___}|{a___,0}:>{a}&
05AB1E, 4 byte
Pada dasarnya memangkas memimpin lalu membuntuti nol input, diberikan sebagai array.
Cobalah online!
sumber
Perl, 19 + 1 = 20 byte
Membutuhkan
-p
bendera:sumber
s/^0 | 0$//&&redo
?
seperti pada contoh - tetapi itu tidak akan mengurangi"0"
..Jelly, 10 byte
Ini tidak menggunakan builtin.
Coba di sini .
sumber
Perl, 38 byte
Jalankan dengan
perl -p
, (3 byte ditambahkan untuk-p
).Menerima angka pada STDIN, satu per baris; memancarkan angka pada STDOUT, satu per baris, sebagaimana seharusnya utilitas unix yang berperilaku baik.
Hanya memperlakukan angka yang diwakili dengan tepat oleh '0' sebagai nol; akan mungkin untuk mendukung representasi lain dengan beberapa byte lagi di regex.
Versi lebih lama, masih harus dijalankan dengan
-p
:Versi yang diperluas, menunjukkan interaksi dengan flag -p:
sumber
perl -E
,-p
flag biasanya hanya dihitung sebagai satu byte, karena hanya ada satu byte tambahan yang berbeda antara itu danperl -pE
.Elixir, 77 byte
l adalah array.
Edit: wah! salin / pasta gagal. tentu saja kita harus mengimpor Enum, yang meningkatkan jumlah byte sebanyak 12 (atau menggunakan Enum.function_name, yang akan membuatnya lebih lama).
sumber
Vitsy, 13 byte
Vitsy perlahan menjadi lebih baik ... (Aku datang untukmu Jelly. ಠ_ಠ)
Ini keluar dengan array di stack. Agar mudah dibaca, TryItOnline! tautan yang saya berikan di bawah penjelasan akan menampilkan daftar yang diformat.
Penjelasan:
Perhatikan bahwa ini akan melempar StackOverflowException untuk input besar yang tidak masuk akal.
TryItOnline!
sumber
R, 39 byte
Empat byte lebih pendek dari jawaban R David Arenburg ini . Implementasi ini menemukan indeks pertama dan terakhir dalam array yang lebih besar dari nol, dan mengembalikan semuanya dalam array di antara kedua indeks tersebut.
sumber
MATL , 9 byte
Cobalah online!
Penjelasan
sumber
Dyalog APL, 15 bytes
Try it here.
sumber
{⌽⍵/⍨×+\⍵}⍣2
?Ruby,
4944 bytesThanks to manatwork for chopping off 5 bytes with a completely different method!
This just
drop
s the first element of the arraywhile
it's 0, reverses the array, repeats, and finally reverses the array to return it to the proper order.sumber
.drop_while()
based solution would be shorter (if using 2 functions):f=->a{a.drop_while{|i|i<1}.reverse};->a{f[f[a]]}
eval
ugliness:->a{eval ?a+'.drop_while{|i|i<1}.reverse'*2}
.<1
, anyway. Thanks!Vim 16 Keystrokes
The input is to be typed by the user between
i
andesc
, and does not count as a keystroke. This assumes that there will be at least one leading and one trailing zero. If that is not a valid assumption, we can use this slightly longer version: (18 Keystrokes)sumber
i
and<esc>
). In vim golf the golfer starts with the input already in a file loaded the buffer and the cursor in the top left corner, but the user also has to save and exit (ZZ
is usually the fastest way). Then you could do something liked[1-9]<enter>$NlDZZ
(13 keystrokes). NoteN
/n
instead of/<up><enter>
ES6, 51 bytes
t
is set to the index after the last non-zero value, whilef
is incremented as long as only zeros have been seen so far.sumber
Perl 6, 23 bytes
Usage:
sumber
Retina, 11 bytes
Quite simple. Recursively replaces zeroes at beginning and end of line.
Try it online!
sumber
JavaScript (ES6), 47 bytes
Where
a
is the array.sumber
a=>a.join(a="")...
.[14]
will return[1, 4]
.Python, 84 characters
sumber
for i in-1,0:
JavaScript (ES6), 34 bytes
Input and output are in the form of a space-delimited list, such as
"0 4 1 2 0 1 2 4 0"
.sumber
Javascript (ES6) 40 bytes
sumber
PHP,
565452 bytesUses Windows-1252 encoding
String based solution
Run like this:
If your terminal is set to UTF-8, this is the same:
Tweaks
sumber
Python 2,
6967 bytessumber
for i in-1,0:
[space][space]while
with[tab]while
. And==0
can be<1
. mothereff.in/…PowerShell, 49 bytes
Takes input
$args[0]
and-join
s them together with commas to form a string. We then use the.Trim()
function called twice to remove first the trailing and then the leading zeros and commas. We then-split
the string on commas back into an array.Alternate version, without using conversion
PowerShell, 81 bytes
Since PowerShell doesn't have a function to trim arrays, we define a new function
f
that will do half of this for us. The function takes$a
as input, then loops through each item with a foreach loop|%{...}
. Each iteration, we check a conditional for$_ -or $b
. Since non-zero integers are truthy, but$null
is falsey (and$b
, being not previously defined, starts as$null
), this will only evaluate to$true
once we hit our first non-zero element in the array. We then set$b=1
and add the current value$_
onto the pipeline. That will then continue through to the end of the input array, with zeros in the middle and the end getting added onto the output, since we've set$b
truthy.We encapsulate and store the results of the loop all back into
$a
. Then, we index$a
in reverse order (i.e., reversing the array), which is left on the pipeline and thus is the function's return value.We call the function twice on the
$args[0]
input to the program in order to "trim" from the front, then the front again (which is the back, since we reversed). The order is preserved since we're reversing twice.This version plays a little loose with the rules for an input array of all zeros, but since ignoring STDERR is accepted practice, the program will spit out two (verbose)
Cannot index into a null array
errors to (PowerShell's equivalent of) STDERR and then output nothing.sumber