Sekuel dari pertanyaan ini .
Tugas
Diberikan array bilangan bulat positif, temukan elemen k terbesar yang:
Ada beberapa jarak integer positif n , sehingga elemen dalam array terletak n tempat ke kiri atau kanan dari k sama dengan n .
Array dijamin mengandung setidaknya satu elemen yang memenuhi kondisi ini.
Kode terpendek (dalam byte) menang. Anda dapat memilih format I / O mana yang Anda suka.
Contoh
Diberikan input
[4, 6, 7, 9, 3, 6, 5, 7, 2]
Nilai yang memenuhi syarat adalah:
- Itu
4
, karena ada7
7 posisi yang terletak di sebelah kanannya - Yang pertama
6
, karena ada3
3 posisi yang berada di sebelah kanannya - Itu
3
, karena ada4
4 posisi terletak di sebelah kirinya - Itu
5
, karena ada2
2 posisi yang terletak di sebelah kanannya - Yang kedua
7
, karena ada3
3 posisi yang berada di sebelah kirinya.
Dari nilai-nilai ini, yang terbesar adalah 7
.
Uji kasus
[1, 13] → 13
[2, 9, 8, 3, 72, 2] → 8
[5, 28, 14, 5, 6, 3, 4, 7] → 14
[1, 3, 5, 15, 4, 1, 2, 6, 7, 7] → 7
[5, 1, 3, 5, 2, 5, 5, 8, 5, 1, 5, 1, 2, 3] → 5
[5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5] → 10
Jawaban:
Jelly , 9 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
05AB1E , 21 byte
Penjelasan
Cobalah online!
sumber
Haskell,
615755 byteContoh penggunaan:
(f.zip[0..]) [5,28,14,5,6,3,4,7]
->14
.(Lebih atau kurang) implementasi langsung dari definisi: untuk setiap indeks
n
dari daftar inputx
tetapa := x!!n
jika ada indeks dii
manab := x!!i
samaabs(n-i)
. Temukan yang maksimal.Edit: @xnatau disimpan dua byte. Terima kasih!
sumber
x
, itu harus lebih pendek untuk mendefinisikan suatu fungsiz
dan komposisizip[0..]
.Jelly , 10 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Python 3,
858072 BytesSunting: -8 Bytes berkat @Dennis
sumber
EXCEL:
3230 byte=MAX(IF(A:A-ROW(A:A)<0,A:A,0))
Saya masih tidak percaya saya mendapatkannya sesingkat ini ...
Cara menggunakan:
rekatkan ini ke sel APA PUN kecuali sel-sel kolom A. Setelah menempel, saat masih mengedit, tekan
control
+shift
+enter
untuk memasukkannya dengan benar.masukkan nilai Anda ke kolom A, 1 nilai per sel (sesuai entri CSV).
Jika Anda ingin mengetahui cara kerjanya, saya telah memposting tip tambahan di Tips saya untuk bermain golf di pertanyaan Excel .
sumber
JavaScript (ES6), 61 byte
sumber
Perl, 45 byte
Termasuk +2 untuk
-ap
Berikan angka pada satu baris di STDIN:
largest.pl
:Satu byte lagi dapat diperoleh dengan mengganti
^P
dengan karakter kontrol literal, tetapi itu mengarah ke peringatan pada STDERR pada perl saat ini.Diasumsikan
largest number + array length < 2^32
sumber
Pyth,
1917 byteTerima kasih kepada @ Pietu1998 untuk -2 byte
Program yang mengambil input daftar pada STDIN dan mencetak hasilnya.
Cobalah online
Bagaimana itu bekerja
sumber
}#
sama dengan@
. Juga, jika Anda mengatur ulang bit terakhir,,-kb+bk
Anda dapat menghapus bit terakhirk
sejak Pyth memasukkannya secara otomatis.MATL, 13 Bytes
Input harus berupa vektor kolom. Yaitu, input dipisahkan dengan titik koma seperti [1; 2; 3], atau koma yang dipisahkan dengan centang transpos di akhir seperti [1,2,3] '.
Cobalah online!
Semua uji kasus: (A) , (B) , (C) , (D) , (E) , (F)
Terima kasih kepada Suever untuk saran di chatroom MATL untuk menyimpan 2 karakter.
Penjelasan:
Strategi keseluruhan sama dengan jawaban Oktaf / MATLAB saya, di mana konsep dasar dijelaskan: https://codegolf.stackexchange.com/a/94161/42247
Kode spesifik dalam jawaban MATL ini dibuat sebagai berikut:
Inti dari metode ini adalah pembuatan matriks Toeplitz yang entri pertamanya adalah abs (ij). Pertama-tama kita membangun matriks Toeplitz dengan entri abs (i-1) +1 dengan perintah toeplitz MATL YT sebagai berikut:
Untuk melihat cara kerjanya, mari kita panggil vektor input ke cuplikan kode ini 'v'. 'N' menemukan panjang v, lalu ':' membuat vektor 1: panjang (v). Selanjutnya 't' membuat salinan 1: panjang (v) pada tumpukan; salinan tambahan ini diperlukan karena bug yang terkenal di fungsi YT di MATL (setara dengan MATL dari toeplitz ()), di mana ia mengharapkan dua salinan input, bukan 1. Kemudian YT mengambil dua salinan vektor ini 1 : length (v) dari stack, dan membuat abs (ij) +1 Toeplitz matrix dari mereka.
Sekarang kita perlu mengurangi 1 dari matriks ini untuk mendapatkan matriks Toeplitz dengan entri abs (ij), dan menemukan lokasi ij di mana abs (ij) matriks Toeplitz ini sama dengan matriks semua vektor kolom yang berisi salinan kolom dari input vektor v. Hal ini dilakukan sebagai berikut:
'T' pertama membuat salinan tambahan dari input dan menyimpannya di tumpukan. The 'n: tYT' membuat toeplitz matrix seperti yang dijelaskan sebelumnya dan mengeluarkannya ke dalam stack. Kemudian 'q' mengurangi 1 dari matriks Toeplitz, dan '=' melakukan perbandingan kesetaraan elemen antara matriks abs (ij) dan vektor yang kolomnya merupakan salinan dari input. Perhatikan bahwa dengan membandingkan vektor kolom dengan matriks, kami secara implisit mengambil keuntungan dari aturan penyiaran operator MATLAB / MATL (vektor kolom dalam perbandingan disalin untuk membuat matriks tanpa mengeluarkan perintah apa pun).
Akhirnya, kita perlu menemukan indeks baris i di mana ada kolom j sedemikian rupa sehingga entri ij'th dalam perbedaan matriks yang dibangun di atas sama dengan 1, kemudian mendapatkan nilai vektor input yang sesuai dengan indeks-indeks ini, kemudian ambil yang maksimum. Ini dalam tiga langkah berikut:
1) Temukan indeks untuk setiap baris yang berisi bukan nol:
2) Ekstrak elemen-elemen vektor input yang sesuai dengan indeks tersebut:
3) Temukan dan kembalikan elemen maksimum:
sumber
YT
telah berubah dalam rilis 20.2.2 . Sekarang menggunakan 1 input secara default (yang lebih bermanfaat secara umum). Meskipun itu akan menghemat 1 byte di sini (hapust
sebelumnyaYT
), itu tidak dapat dieksploitasi karena perubahan bahasa postdates tantangan. Tetapi itu memiliki efek bahwa jawaban Anda tidak lagi berlaku dalam rilis baru, yang sekarang tinggal di TIOn:
olehf
Ruby, 66 byte
sumber
Oktaf / MATLAB, 40 Bytes
Input harus berupa vektor kolom.
Terima kasih kepada Luis Mendo untuk saran menghemat 3 byte (lihat komentar)
Terima kasih kepada Suever untuk saran yang menyimpan 4 byte lebih banyak (menggantikan ~~ (jumlah ()) dengan any ())
Penjelasan:
Diberikan vektor input v, masalah ini setara dengan menemukan semua solusi i, j dari persamaan diskrit berikut,
di mana abs () adalah fungsi nilai absolut. Setiap v (i) yang memecahkan persamaan ini adalah salah satu solusi kandidat yang dapat kita maksimalkan.
Sebagai fungsi diskrit dari i dan j, semua kemungkinan untuk sisi kiri dapat diatur dalam matriks toeplitz yang terlihat seperti ini:
Dan karena sisi kanan tidak bergantung pada i, semua kemungkinan untuk itu dapat disusun menjadi matriks di mana kolom semua salinan dari input,
Untuk menemukan semua solusi persamaan, kami kurangi dua matriks ini dan temukan lokasi di mana ada nol. Baris di mana ada nol sesuai dengan indeks yang diinginkan i di mana ada aj sedemikian rupa sehingga abs (ij) = v (i).
Trik lainnya:
sumber
v
sebagai vektor kolom, sebutkan saja dalam jawaban. Anda juga menggantinyafind
dengan~~
menyimpan dua byte lagitoeplitz
(YT
), ia menggunakan dua input (bukan satu) secara defaultMathematica, 69 byte
Fungsi anonim. Mengambil daftar integer sebagai input dan mengembalikan integer sebagai output. Abaikan pesan yang dihasilkan.
sumber
Scala, 94 byte
sumber
PHP, 128 Bytes
sumber
Java 7,
125123 byte2 byte disimpan berkat @rco .
Tidak dikelompokkan (semacam) & kode pengujian:
Coba di sini.
Keluaran:
sumber
,y
. Dan saya memang sampai pada kesimpulan yang sama tentang terner tunggal jika. Tentu saja itu mungkin, tetapi Anda akan melakukan pemeriksaan dua kali lebih lama.Java, 118 byte
sumber
Python, 58 byte
Berdasarkan Tony S. jawaban Ruby . Jawaban ini berfungsi dalam Python 2 dan 3. Selamat datang di saran golf.
Tidak melakukanolf
sumber
Ruby 56 byte
Solusi ruby terkecil saya.
Cukup mudah untuk menguji di konsol rel
Ini dimulai pada 63 byte, terima kasih atas saran untuk membantu memangkasnya!
sumber
.map
sebagai gantinya.each
(x) if (y)
dapat diganti dengan(y)&&(x)
a<<b
sebagai gantinyaa+=[b]
Sebenarnya , 17 byte
Jawaban ini adalah port Sebenarnya dari jawaban Python saya . Saran bermain golf diterima. Cobalah online!
Tidak melakukanolf
sumber
T-SQL (sqlserver 2016), 132 byte
Golf:
Tidak Terkumpul:
Biola
sumber
JavaScript (ES6),
5654 bytesumber
Clojure, 68 byte
Sebagai contoh
(map-indexed (juxt - +) [3 4 1 2])
adalah([-3 3] [-3 5] [1 3] [1 5])
(indeks+/-
nilainya), ini digunakan untuk mencari nilai-nilai dari vektor asli (out-of-range defaulting to0
) dan nilai maks ditemukan. Masih terasa sedikit verbose tapi setidaknya saya harus menggunakanjuxt
:)sumber