Tulis cuplikan untuk menghitung mode (angka paling umum) dari daftar bilangan bulat positif.
Misalnya, mode
d = [4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
adalah 1
, karena itu terjadi maksimal 5 kali.
Anda dapat mengasumsikan bahwa daftar tersebut disimpan dalam variabel seperti d
dan memiliki mode unik.
misal: Python, 49
max(((i,d.count(i))for i in set(d)), key=lambda x:x[1])
Ini adalah kode-golf , jadi solusi terpendek dalam byte menang.
code-golf
array-manipulation
garg10mungkin
sumber
sumber
d,
dankey=
.defaultdict(int)
atauCounter
. Sesuatu sepertiCounter(d).most_common()[0]
.Matlab / Oktaf,
75 byteTidak mengherankan ada fungsi bawaan untuk menemukan mode. Sebagai fungsi anonim:
Ini mengembalikan elemen yang paling umum terjadi dalam vektor input dengan ikatan pergi ke nilai yang lebih kecil.
Disimpan 2 byte berkat Dennis!
sumber
help mode
): "Jika dua, atau lebih, nilai memiliki frekuensi 'mode` yang sama mengembalikan yang terkecil."@mode
.Pyth - 6
Cobalah online.
Mengharapkan input pada stdin like
[4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
. Ikatan diselesaikan oleh kejadian terakhir karena Python melakukan jenis stabil.Urutkan daftar dengan menghitung nilai dalam daftar, lalu cetak nomor terakhir daftar.
Q
dapat diganti dengand
jika Anda diinisialisasid
untuk mengandung nilai sebelum mis=d[4 3 1 0 6 4 4 0 1 7 7 3 4 1 1 2 8)
Kode semu python-esque:
Penjelasan Lengkap:
Pyth's
orderby
berjalan persis seperti Pythonsorted
denganorderby
argumen pertama yang menjadikey
argumen.sumber
Mathematica, 25 byte
atau
Seperti dalam tantangan, ini mengharapkan daftar untuk disimpan
d
.atau ... 15 byte
Tentu saja, Mathematica tidak akan menjadi Mathematica jika tidak memiliki built-in:
Commonest
mengembalikan daftar semua elemen yang paling umum (dalam kasus dasi), dan#&@@
golfFirst@
.sumber
Ruby, 22 byte
Pada dasarnya port jawaban Mathematica saya, kecuali Ruby memiliki direct
max_by
jadi saya tidak perlu menyortir terlebih dahulu.sumber
d.max_by d.method:count
tapi itu sekitar satu juta (alias bahkan dua) byte lebih lama. Namun, perlu dicatat bahwa itu mungkin.R,
3325 byteTerima kasih @Hugh atas bantuan yang dipersingkat:
Asli:
Ini menghitung frekuensi setiap elemen dalam vektor
d
, lalu mengembalikan nama kolom yang berisi nilai terbesar. Nilai yang dikembalikan sebenarnya adalah string karakter yang berisi angka. Itu tidak mengatakan di mana pun bahwa itu tidak apa-apa, jadi ...Ada saran untuk mempersingkat ini!
sumber
names(sort(-table(d))[1])
CJam,
1110 byteMengasumsikan array dalam variabel yang disebut
A
. Ini pada dasarnya menyortir array berdasarkan kemunculan setiap angka dalam array dan kemudian mengambil elemen terakhir dari array.Contoh penggunaan
Keluaran
1 byte disimpan berkat Dennis!
Cobalah online di sini
sumber
A{A\-,}$0=
lebih pendek satu byte.Ae`$e_W=
$e`$e_W=
Powershell 19
(ini mengasumsikan array sudah aktif
$d
)sumber
J - 12 char
Fungsi anonim. Urutkan daftar dari yang paling tidak umum, dengan mengambil item pertama.
0{
Pertama dari~.
Barang unik\:
Diturunkan oleh#/.~
FrekuensiCobalah sendiri.
sumber
JavaScript (ES6) 51
Hanya satu baris ekspresi menggunakan variabel yang dimuat sebelumnya d. Urutkan array berdasarkan frekuensi kemudian dapatkan elemen pertama.
Efek samping yang buruk, array asli diubah
Seperti biasa, menggunakan .map alih-alih. Mengurangi karena keseluruhan 1 char lebih pendek. Dengan .reduce it 'hampir solusi bersih, non-golf.
Akhirnya, solusi menggunakan fungsi, tidak mengubah array asli dan tanpa global (62 byte):
Uji konsol FireFox / FireBug
Keluaran 1
Array d menjadi:
sumber
Python - 32
Jangan melihat solusi 18 karakter di mana pun di masa depan untuk jujur.
EDIT: Saya berdiri terkoreksi, dan terkesan.
sumber
JavaScript, ES6, 71 byte
Agak panjang, bisa banyak bermain golf.
Ini menciptakan fungsi
f
yang bisa disebut sepertif([1,1,1,2,1,2,3,4,1,5])
dan akan kembali1
.Cobalah di Konsol Firefox terbaru Anda.
sumber
f=a=>(c=b=[],a.map(x=>b[x]++-1?0:b[x]=1),b.map((x,i)=>c[x]=i),c.pop())
lebih pendek 1 byte.05AB1E , 3 byte
(non-bersaing - pertanyaan mendahului bahasa)
Penjelasan:
Jika Anda ingin menyimpan array dalam suatu variabel alih-alih menggunakan input, cukup dorong array ke stack di awal program.
Cobalah online!
sumber
C # - 49
Tidak bisa bersaing dengan C # tapi oh well
Dengan asumsi
d
adalah arrayd.GroupBy(i=>i).OrderBy(a=>a.Count()).Last().Key;
sumber
bash -
2927 karakterMenggunakannya:
yaitu "1" adalah mode, dan muncul lima kali.
sumber
sort|uniq -c|sort -nr|sed q
menyimpan beberapa karakterGolfScript, 10 byte
Dari jawaban ini saya menulis ke Tips untuk bermain golf di GolfScript . Mengharapkan input dalam array bernama
a
, mengembalikan hasil pada stack. (Untuk membaca input dari sebuah array pada stack, prepend:
selama 11 byte; untuk membaca input dari stdin (dalam format[1 2 1 3 7]
), juga prepend~
untuk 12 byte.)Kode ini berfungsi dengan mengulangi larik input, mengurangi setiap elemen dari larik asli, dan menghitung jumlah elemen yang tersisa. Ini kemudian digunakan sebagai kunci untuk mengurutkan array asli, dan elemen pertama dari array yang diurutkan dikembalikan.
Demo online.
Ps. Terima kasih kepada Peter Taylor karena menunjukkan tantangan ini kepada saya .
sumber
Dyalog APL, 12 karakter
d[⊃⍒+/∘.=⍨d]
∘.=⍨d
sama dengand∘.=d
, produk luar refleksif dari=
. Ini menciptakan matriks boolean membandingkan setiap pasangan elemen did
.+/
menjumlahkan matriks itu di sepanjang salah satu sumbu dan menghasilkan vektor.⍒
nilai vektor, yaitu mengurutkannya dengan indeks. (Seperti kata mesin terbang,⍒
nilai dalam urutan menurun dan⍋
akan peringkat dalam urutan naik).⊃
mengambil indeks pertama dari gradasi — indeks elemen terbesar darid
.d[...]
mengembalikan elemen itu.sumber
+/∘.=⍨d
dihitung untuk setiap elemend
.⊢∘≢⌸d
dihitung untuk setiap elemen∪d
, sehingga indeks tidak sesuai dengand
. -Balik:d←1 1 2 2 2
. Untuk membuatnya bekerja:(∪d)[⊃⍒⊢∘≢⌸d]
atau(⊃⍒⊢∘≢⌸d)⊃∪d
.Perl 6 , 21 byte
Contoh:
Jika ada dasi itu akan mencetak yang lebih besar dari yang diikat.
The
.Bag
Metode pada Daftar atau Array menciptakan hash diukur yang mengaitkan jumlah total berapa kali nilai tertentu terlihat dengan nilai tersebut.The
.invert
Metode menciptakan Daftar pasangan di tas dengan kunci dan nilai bertukar. (Alasan kami menyebutnya untuk metode selanjutnya untuk melakukan apa yang kami inginkan)The
.max
Metode pada Daftar Pasangan mengembalikan Pair terbesar membandingkan kunci pertama dan dalam kasus dasi membandingkan nilai.(Ini karena itu adalah bagaimana
multi infix:<cmp>(Pair:D \a, Pair:D \b)
menentukan mana yang lebih besar)The
.value
Metode mengembalikan nilai dari Pair. (Itu akan menjadi kunci yang kami kejar jika bukan karena.invert
panggilan sebelumnya)Jika Anda ingin mengembalikan semua nilai yang diikat dalam kasus seri:
The
.classify
metode mengembalikan daftar pasangan di mana tombol dari memanggil lambda Apapun*.value
dengan masing-masing Pasangan.Lalu kami menelepon
.max
untuk mendapatkan Pasangan terbesar.Panggilan untuk
.value
memberi kami Pasangan asli dari Tas (hanya satu dalam kasus ini)Kemudian kita gunakan
>>.key
untuk memanggil.key
metode pada setiap Pair dalam daftar, sehingga kita berakhir dengan daftar nilai yang paling terlihat.sumber
Java 8: 184 byte
Input A harus bertipe
Integer[]
. Catatanjava.util.*
danjava.util.stream.*
perlu diimpor, namun dalam semangat oneliner mereka ditinggalkan.sumber
(i->i,Collectors.counting())
.Alat Bash + unix, 62 byte
Harapkan array di STDIN. Format input tidak masuk hitungan, asalkan angkanya bukan bilangan bulat negatif.
Diedit: lolos wildcard dalam argumen grep. Sekarang ini dapat dijalankan dengan aman di direktori yang tidak kosong. Berkat kerja manat.
sumber
[0-9]*
bisa diperluas ke nama file yang cocok.'
argumengrep
.Perl, 27 byte
Mengembalikan nilai paling umum terakhir dalam kasus seri.
sumber
PHP,
5350 byteJalankan seperti ini:
Tweaks
d
sumber
Java 8, 83 Bytes
d
harus aCollection<Integer>
.Jika
Collections
dapat diimpor secara statis:59 Bytes
sumber
Haskell 78
Jika impor diabaikan, berarti 45 .
sumber
maximumBy
alih-alihlast.sortBy
. Kode baru akan menjadig=head.maximumBy(comparing length).group.sort
.g=
. 2.) Anda dapat menggantimaximumBy(comparing length)
dengansnd.maximum.map((,)=<<length)
yang tidak perlu imporOrd
, untuk total 62 bytes: Cobalah secara online!Haskell ,
4239 byteCobalah online!
Sunting: Thans to Zgarb untuk -3 bytes
sumber
sum
tidak perlu di sini.Brachylog , 5 byte
Cobalah online!
Ini sebenarnya bukan cuplikan, tapi saya tidak yakin apa yang akan terjadi ...
sumber
Clojure, 32 byte
(frequencies %)
mengembalikan hash-map, yang dapat digunakan sebagai fungsi. Diberikan kunci, ia mengembalikan nilai yang sesuai :)Panjang yang sama:
sumber
Scala, 32
sumber
C ++ 119
Kode dan tes lengkap:
sumber