Tantangan:
Ambil vektor / daftar bilangan bulat sebagai input, dan hasilkan angka terbesar yang berdekatan dengan nol.
Spesifikasi:
- Seperti biasa, format input dan output opsional
- Anda dapat mengasumsikan bahwa akan ada setidaknya satu nol, dan setidaknya satu elemen tidak nol.
Kasus uji:
1 4 3 6 0 3 7 0
7
9 4 9 0 9 0 9 15 -2
9
-4 -6 -2 0 -9
-2
-11 0 0 0 0 0 -12 10
0
0 20
20
Semoga sukses dan senang bermain golf!
Jawaban:
Jelly , 8 byte
Cobalah online!
sumber
MATL , 10 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Mari kita ambil input
[-4 -6 -2 0 -9]
sebagai contoh.sumber
x(~~(dec2bin(5)-48))
. Ide siapa itu untuk mengimplementasikan yang itu? Sangat pintar, dan berguna untuk array logis! :) Jawaban bagus!dec2bin()-'0'
ratusan kali dalam MATLAB, jadi saya tahu bahwa orang harus menggunakan MATL :-)05AB1E , 9 byte
Penjelasan
Tidak bekerja di penerjemah online, tetapi bekerja offline.
sumber
ü
baru ditambahkan kemarin :)0
jika jawaban yang sebenarnya akan negatif? Anda harus membuang nol, saya pikir.˜
denganO
(jumlah).Haskell,
6343 byteTerima kasih kepada @MartinEnder selama 4 byte!
sumber
a*b==0
bukan||
.Pyth,
121110 byteMembentuk pasangan, menyaring berdasarkan nol anggota, mengurutkan berdasarkan jumlah, mengembalikan terbesar.
sumber
,Vt
(implisitQQ
) mengembalikan pasangan yang sama.:Q2
, tetapi dengan pasangan yang dibalik. Seharusnya bekerja.f}0T
is/#0
JavaScript (ES6),
595756 byteSunting: disimpan 2 byte berkat Huntro
Sunting: disimpan 1 byte berkat ETHproductions
sumber
==
alih-alih===
l=>l.map((n,i)=>m=l[i-1]*l[i+1]==0&n>m?n:m,m=-1/0)|m
JavaScript (ES6), 53 byte
Karena saya suka menggunakan
reduce
. Solusi alternatif, juga 53 byte:sumber
Python, 49 byte
Tes ada di ideone
Ritsleting melalui pasangan, jumlah yang berisi nol, mengembalikan maksimum.
sumber
Ruby, 51 byte
pemakaian
sumber
a+b
.-3 -2 0
Pengembalian0
saya pikir menggantikan....?0:...
Dengan...?-1.0/0:...
harus memperbaikinya, menambahkan 5 bytes.PHP,
776871 byte-3 byte dari anonim,-4 dan -2 dari MartinEnderjalankan bersama
php -r '<code>' '<space separated values>'
sumber
\K
untuk membuang pertandingan sejauh ini lebih pendek daripada menggunakan melihat-belakang.\S+
untuk mencocokkan integer yang ditandatangani. Anda mungkin harus menggunakan\b0,
sehingga Anda tidak harus menambahkan sebelumnya,
.4 0 0 5
?\K
berfungsi dengan alternatif? Untuk alasan yang tidak diketahui, alternatif kedua kembali0 0
, sehingga tidak ada lagi yang0
cocok sebelum5
. Tetap, terima kasih.Java 7,
118105106 byte13 byte disimpan berkat @cliffroot dengan menggunakan pendekatan aritmatika. 1 byte tambahan terima kasih @mrco setelah ia menemukan bug (test case tambahan
2, 1, 0
akan kembali2
sebagai ganti1
).Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
int d(int[]a){int i,m=a[i=0],c;for(;++i<a.length;m=a[i]*a[i-1]==0&(c=a[i]+a[i-1])>m?c:m);return m;}
CJam , 16 byte
Cobalah online! (Sebagai suite uji.)
Penjelasan
sumber
MATLAB dengan Image Processing Toolbox, 32 byte
Ini adalah fungsi anonim. Contoh penggunaan untuk kasus uji:
sumber
Dyalog APL , 14 byte
⌈/
terbesar dari∊
yang diratakan (" e nlisted"2(
...)/
berpasangan+
sum (nol plus sesuatu adalah sesuatu)↑⍨
diambil jika0
nol∊
adalah anggota dari,
pasangan (lit. gabungan dari nomor kiri dan kanan)TryAPL online!
sumber
R,
4847 byteEDIT: Memperbaiki kesalahan berkat @Vlo dan mengubahnya untuk membaca input dari stdins, menyimpan satu byte dengan menetapkan
w
dan melewatkan paranthes.Penjelasan belum ditanggapi
v
mengambil nilai 0:w <- which(v == 0)
+-1
:w-1
danw+1
w-1
danw+1
Perhatikan bahwa jika elemen terakhir atau pertama
v
adalah nol,w+-1
secara efektif akan mengambil indeks di luar panjang vektor yang menyiratkan bahwav[length(v)+1]
pengembalianNA
. Ini umumnya tidak ada masalah tetapimax()
fungsi - fungsi tidak nyaman kembaliNA
jika ada kejadian dalam vektor kecuali ada yang menentukan opsina.rm=T
. Jadi, 2 byte lebih pendek untuk mengurutkan dan mengekstraksi elemen pertama daripada menggunakanmax()
, misalnya:sumber
c(1, 4, 3, 6, 0, 10, 7, 0)
c((w<-which(v==0))-1,w+1)
Juga sedikit lebih pendek dengan pemindaiansort((v<-scan())[c(w<-which(v==0)-1,w+1)],T)[1]
()
;). Diperbarui kode dan ditugaskanv
manipulasi sebelumnya sekarang.Mathematica,
4643 byteDisimpan 3 byte karena @MartinEnder .
Fungsi anonim. Mengambil daftar integer sebagai input dan mengembalikan integer sebagai output. Didasarkan pada solusi Ruby.
sumber
Perl, 42 byte
Termasuk +1 untuk
-p
Berikan nomor on line di STDIN
largest0.pl
:sumber
Julia,
5655 BytesBuat tupel untuk nilai tetangga, ambil tupel yang berisi 0, jumlahkan nilai tupel, dan temukan maksimum
sumber
Python 2, 74 Bytes
Siklus melalui setiap elemen, jika ada
0
di posisi kiri atau kanan elemen saat ini, masukkan dalam generator, dan kemudian jalankan melaluimax
. Kita perlu mengisi daftar dengan beberapa0
nomor. Itu tidak akan pernah dimasukkan karena irisan[-1:2:2]
tidak akan memasukkan apa pun.sumber
T-SQL, 182 byte
Golf:
Tidak Disatukan:
Biola
sumber
PowerShell v3 +, 62 byte
Sedikit lebih lama dari jawaban yang lain, tetapi pendekatan yang bagus.
Mengambil input
$n
. Kemudian lewati indeks0..$n.count
, gunakanWhere-Object
(|?{...}
) untuk menarik keluar indeks di mana item sebelumnya atau berikutnya dalam array0
, dan feed mereka kembali ke dalam irisan array$n[...]
. Kami kemudian|sort
elemen-elemen itu, dan mengambil yang terbesar[-1]
.Contohnya
sumber
q, 38 byte
sumber
{}
untuk membuatnya berfungsi.J, 18 byte
Penjelasan
sumber
Perl 6 , 53 byte
Diperluas:
sumber
PHP, 66 byte
Cukup mudah. Iterate atas input, dan ketika suatu angka
0
, itu menetapkan$m
ke angka tertinggi dari 2 angka yang berdekatan dan nilai sebelumnya dari$m
.Jalankan seperti ini (
-d
ditambahkan hanya untuk estetika):sumber
C #
7674 bytePenjelasan:
Gunakan zip untuk bergabung dengan array dengan sendirinya tetapi melewatkan nilai pertama dalam referensi ke-2 sehingga item nol bergabung ke item satu. Kalikan a kali b, jika hasilnya nol, salah satunya harus nol dan output a + b. Kalau tidak, output bilangan bulat minimum yang mungkin dalam bahasa. Dengan asumsi bahwa kita akan selalu memiliki nol dan bukan nol, nilai minimum ini tidak akan pernah menjadi output sebagai maks.
Pemakaian:
sumber
int[]i) {
. Juga, saya menghitung 75 byte dalam kode Anda saat ini (74 jika Anda menghapus spasi).a?b?i.Min()).Max():a:b
using System.Linq;
, tidak?System.Linq;
adalah bagian dari templat kelas baru yang standar.using
pernyataan dalam hitungan byte AndaR,
4854 byteMembaca vektor dari input konsol, kemudian mengambil maksimum semua nilai yang berdekatan dengan 0.
Sunting: Tangkapan NAs yang diproduksi di perbatasan, terima kasih rturnbull!
sumber
20 0
, karenas[w(s==0)+1]
kembaliNA
, danmax
perlakuan standarNA
adalah mengembalikannya. Anda dapat memperbaikinya dengan menambahkan argumenna.rm=T
, atau mengerjakan kembali kode yang akan digunakansort
(lihat jawaban R lainnya yang diposting di atas).Racket 183 byte
Versi detail:
Pengujian:
Keluaran:
sumber
C 132 byte
Output menggunakan kode pengembalian utama:
Saya merasa harus menyimpan beberapa byte dengan menyimpan salah satu panggilan atoi, tetapi saya tidak dapat menemukan cara yang efisien. (
,t
plust=
plus,
plust
dua kali terlalu panjang). Juga ini secara teknis menggunakan perilaku yang tidak terdefinisi (pengaturan _ [a] menjadi "1") tetapi setiap kompiler yang saya kenal mengizinkannya secara default.Strategi: pad awal dan akhir array dengan 1, kemudian lewati bagian internal memeriksa setiap tetangga.
sumber
PHP
6964 byteBeberapa byte dan mematikan dari Jörg Hülsermann dan Titus. =
(-5)
Membutuhkan register_globals diaktifkan. Pemakaian:
http://localhost/notnull.php?i[]=9&i[]=-5i[]=...
Golf:
sumber
-d register_globals=1
(atau tentukan versi di mana register_globals diaktifkan secara default)json_decode
itu ide yang bagus.?id[]=1&id[]=2&id[]=3
dan kemudian$_GET["id"]
mengembalikan array. Karena alasan ini json_decode tidak masuk akal bagi saya