Memasukkan
Daftar bilangan bulat tidak negatif.
Keluaran
Bilangan bulat non-negatif terbesar h
sehingga setidaknya h
angka dalam daftar lebih besar atau sama dengan h
.
Uji Kasus
[0,0,0,0] -> 0
[12,312,33,12] -> 4
[1,2,3,4,5,6,7] -> 4
[22,33,1,2,4] -> 3
[1000,2,2,2] -> 2
[23,42,12,92,39,46,23,56,31,12,43,23,54,23,56,73,35,73,42,12,10,15,35,23,12,42] -> 20
Aturan
Anda dapat menulis program lengkap atau fungsi, dan fungsi anonim juga diperbolehkan. Ini adalah kode-golf, sehingga jumlah byte terkecil menang. Celah standar tidak diijinkan.
Latar Belakang
The h-index adalah gagasan yang digunakan dalam dunia akademis yang bertujuan untuk menangkap dampak dan produktivitas peneliti. Menurut Wikipedia, seorang peneliti memiliki indeks h , jika ia telah menerbitkan h artikel ilmiah, yang masing-masing telah dikutip dalam artikel lain setidaknya h kali. Dengan demikian, tantangan ini adalah tentang menghitung indeks-h dari daftar jumlah kutipan.
Memperbarui
Wow, jawaban bagus semuanya! Saya telah menerima yang terpendek, tetapi jika orang lain membuat yang lebih pendek, saya akan memperbarui pilihan saya.
Pemenang berdasarkan bahasa
Berikut adalah daftar pemenang berdasarkan bahasa yang akan saya upayakan tetap up to date. Saya telah memasukkan semua posting dengan skor tidak negatif. Harap perbaiki saya jika saya melakukan kesalahan di sini.
- APL : 7 byte oleh @MorisZucca
- Bash + coreutils : 29 bytes oleh @DigitalTrauma
- C # : 103 byte oleh @ LegionMammal978
- C ++ : 219 byte oleh @ user9587
- CJam : 15 bytes oleh @nutki
- GolfScript : 13 byte oleh @IlmariKaronen
- Haskell : 40 byte oleh @proudhaskeller
- J : 12 byte oleh @ ɐɔıʇǝɥʇuʎs
- Java : 107 byte oleh @Ypnypn
- JavaScript : 48 byte oleh @ edc65
- Mathematica : 38 byte oleh @ kukac67
- Perl : 32 bytes oleh @nutki
- Pyth : 10 bytes oleh @isaacg
- Python : 49 bytes oleh @feersum
- R : 29 byte oleh @MickyT
- Ruby : 41 byte oleh @daniero
- Scala : 62 bytes oleh @ChadRetz
- SQL : 83 byte oleh @MickyT
- TI-BASIC : 22 byte oleh @Timtech
CJam, 15 byte
Terjemahan langsung dari solusi Perl saya.
sumber
l~$W%{W):W>},,
- 14 byte{$W%ee::<1b}
(ee
ditambahkan 2015-04-17) dan{$W%_,,.>1b}
(.
ditambahkan 2015-02-21).J (
1312)Cukup mirip dengan solusi randomra. Demonstrasi:
sumber
#\<:
alih-alihi.@#<
menyimpan karakter.Mathematica,
44424038 byteFungsi anonim:
Jalankan dengan menempelkan input ke ujung seperti:
sumber
#>i++
. Saya menguji beberapa kasus lagi. (Dan terima kasih atas semua sarannya!)SQL,
819483Diberikan tabel (I) dari nilai (V), kueri berikut akan mengembalikan h. Diuji dalam PostgreSQL dan juga akan berfungsi di SQL Server. Sunting Buatlah kembali 0 bukannya NULL. Menjadi lebih baik dengan COUNT, terima kasih @nutki
Contoh SQLFiddle
Pada dasarnya itu nomor baris pada jenis nilai yang menurun. Kemudian ia mengembalikan nomor baris maksimum di mana nomor baris lebih besar dari sama dengan nilai.
sumber
COUNT(R)
alih-alihCOALESCE(MAX(R),0)
untuk perbaikan yang lebih pendek untuk masalah NULL.R,
393529Diberikan vektor bilangan bulat di i dan menggunakan logika dari jenis terbalik kemudian mengembalikan
panjangvektor di mana jumlah elemen kurang dari s. Terima kasih kepada @plannapus untuk tip yang bagus.sumber
s=sort(i);sum(s>=length(s):1)
CJam, 23 byte
Ini mengambil daftar sebagai array pada STDIN, seperti
Uji di sini.
Anda dapat menggunakan ini untuk menjalankan semua test case:
Penjelasan
Logikanya agak mundur, tetapi menyimpan beberapa byte. Pada dasarnya, blok diberikan untuk mengurutkan pengembalian
0
untuk kandidat yang valid dan1
sebaliknya. Jadi kandidat yang valid menjadi yang utama dalam array yang diurutkan. Dan karena pengurutannya stabil, dan kita mulai dengan daftar dari N hingga 1, ini akan mengembalikan jam valid terbesar.sumber
Perl 5: 32 (30 + 2 untuk
-pa
)Mengambil input yang dipisahkan ruang pada STDIN:
sumber
sort{$b-$a}
hemat 2 lagiPython (63)
Pada dasarnya port langsung dari solusi J saya. Jelas, jauh lebih lama, seperti yang mungkin dibayangkan.
sumber
enumerate
.Haskell, 40
ini mencari nomor pertama yang tidak sesuai dengan skema dan mengembalikan pendahulunya.
sumber
until
: Cobalah online!Ruby
4441Strategi rekursif, kurang lebih sama dengan solusi Python xnor:
Ruby 52
Non-rekursif:
Fungsi lambda / anonim "Stabby", membutuhkan Ruby 1.9 atau lebih baru. Panggil dengan mis
f[[22,33,1,2,4]]
sumber
Bash + coreutils, 29
Masukan diambil dari stdin sebagai daftar yang dipisahkan oleh baris baru.
sort
bilangan bulat dalam urutan menurunnl
awalan setiap baris dengan nomor baris berbasis 1, memisahkan nomor baris dan sisa baris dengan yang lebih besar dari>
bc
. Bilangan bulat kurang dari jumlah barisnya menghasilkan 0. Jika tidak 1.grep
menghitung jumlah0
s, yaitu jumlah bilangan bulat lebih besar dari atau sama denganh
Contoh
sumber
JavaScript (ES6) 48
Solusi rekursif.
Tes di konsol FireFox / FireBug
Keluaran
sumber
f=(l,h=0)=>l.map(v=>x+=v>h,x=0)&&x>h?f(l,h+1):h
. Namun, solusi Anda akan menjadi 47 byte juga jika Anda hanya mengubahh=-1
keh=0
.Java 8, 116 byte.
Kelas penuh:
Fungsi:
sumber
APL, 12 karakter
(+/⊢≥⍒)⊂∘⍒⌷⊢
sumber
C ++
815219 from (wc -c main.cpp)Baiklah inilah beberapa kode terburuk yang pernah saya tulis! :)
sumber
Jelly, 6 byte
Penjelasan:
sumber
CJam, 22 byte
Mengambil daftar sebagai input:
Keluaran:
Coba di sini
sumber
GolfScript, 13 byte
Uji kode ini secara online. 1
Mengambil input sebagai array pada stack. Menggunakan algoritma yang sama dengan solusi Python feersum , iterasi angka-angka dalam array dan menambah penghitung dari 0 sampai sama dengan atau melebihi elemen array saat ini.
1) Server GolfScript online tampaknya mengalami timeout acak lagi. Jika program Anda habis waktu, coba jalankan kembali.
sumber
TI-BASIC, 22 byte
Representasi ASCII:
Hex dump:
Mendapat daftar sebagai input. Mulai dari Ans = 0, periksa apakah setidaknya Ans + 1 dari jumlah setidaknya Ans + 1. Jika demikian, tambahkan Ans dan lil lagi. Jika tidak, output Ans.
sumber
JAGL Alpha 1.2 - 14
Tidak dihitung karena fungsionalitas array terbalik 'C' ditambahkan setelah pertanyaan, tetapi tetap saja menjawab untuk bersenang-senang.
Diasumsikan bahwa array adalah item pertama pada stack, dan menempatkan jawabannya di bagian atas stack.
Untuk mencetak, cukup tambahkan
P
di bagian akhir, tambahkan satu byte.Penjelasan:
sumber
J,
1511 karakter(Solusi J terpendek saat ini.)
Membandingkan elemen
<:
daftar yang diurutkan\:~
dengan 1..n + 1#\
dan menghitung perbandingan yang sebenarnya+/
.Menguji kesamaan dengan solusi J lainnya pada 100 kasus uji acak:
sumber
Reng v.3.2, 43 byte
Coba di sini! Kode ini dapat dibagi menjadi tiga bagian: awal, komputasi, dan final.
Awal
Ini toko
1
untukx
, panjang tumpukan masukank
untuky
, dan mendapatkan semua input (aïí
) yang kemudian diurutkan ('
).1ø
pergi ke baris berikutnya, yaitu bagian selanjutnya.Komputasi
Reng tidak memiliki bawaan untuk ketidaksetaraan. Jadi, suatu algoritma harus diimplementasikan. Algoritma terpendek yang saya temukan
a < b
adalah%:1,%1e
; ini terlihat seperti ini:Saya yakin itu sudah beres! Biarkan saya jelaskan lebih lanjut.
x % 1
, yaitu modulus dengan 1, memetakanx
ke(-1,1)
. Kita tahu bahwa(a/b) % 1
adalaha/b
ketikaa < b
. Jadi, ungkapan ini sama dengana < b
.Namun, ini tidak berfungsi dengan baik karena masalah dengan modulus dengan nol. Jadi, kami menambah setiap anggota tumpukan dan penghitung pada awalnya.
Setelah kita mendapatkan ketimpangan Boolean di stack,
x+
menambahkannya ke x, tetapi meninggalkannya di stack untuk saat ini.y1-
penurunany
, dan?^
naik iffy == 0
dan kami melanjutkan ke tahap akhir. Jika tidak, kita menempatkany-1
ke dalamy
dan barux
ke dalamx
.Terakhir
Ini akan memunculkan sisa
y-1
dari tumpukan, mengurangi hasilnya, mengeluarkannya, dan mengakhiri program.sumber
05AB1E , 5 byte
Cobalah online! atau sebagai Test Suite
Penjelasan
sumber
Mathematica, 57 byte
Ini adalah fungsi anonim yang mengambil daftar dan mengembalikan bilangan bulat, seperti
Gunakan ini untuk memeriksa semua kasus uji:
sumber
C #, 103
Fungsi anonim.
Bertakuk:
sumber
Scala, 62
sumber