Diberikan daftar bilangan bulat, hasilkan jumlah permutasi dari bilangan bulat, dengan permutasi yang tidak dapat dibedakan dihitung satu kali. Jika ada n
bilangan bulat, dan setiap kelompok angka yang tidak dapat dibedakan memiliki panjang n_i
, inin! / (n_1! * n_2! * ...)
Aturan
Input akan berupa daftar sebagai argumen untuk suatu fungsi atau program dengan 1 hingga 12 bilangan bulat non-negatif.
Output akan mencetak atau mengembalikan jumlah permutasi seperti dijelaskan di atas.
Tidak ada celah standar atau fungsi bawaan (menghasilkan permutasi, kombinasi, dll.). Faktorial diizinkan.
Uji Kasus
Input:
1, 3000, 2, 2, 8
1, 1, 1
2, 4, 3, 2, 3, 4, 4, 4, 4, 4, 1, 1
Output:
60
1
83160
Jawaban:
Python, 48 byte
Implementasi rekursif.
Dalam rumus,,
n! / (n_1! * n_2! * ...)
jika kita menghapus elemen pertama (katakanlah itu1
), jumlah permutasi untukn-1
elemen yang tersisa adalahJadi, kita mendapatkan jawabannya dengan mengalikan dengan
n/n1
, fraksi timbal balik dari elemen yang sama dengan yang pertama, dengan hasil rekursif untuk sisa daftar. Daftar kosong memberikan dasar kasus 1.sumber
/l.count(l[0])
pada akhirnya? Maka Anda tidak perlu floating point yang menjijikkan itu.MATL ,
141312 byteCobalah online!
Penjelasan
Pendekatannya sangat mirip dengan jawaban @ Adnan .
sumber
05AB1E ,
151413 byteKode:
Penjelasan:
Menggunakan pengodean CP-1252 .
Cobalah online! .
sumber
JavaScript (ES6),
6461 byteMenggunakan rumus yang diberikan, kecuali menghitung masing-masing faktorial secara bertahap (jadi misalnya yang
r=r*++i
dikalibrasi secara efektifn!
).Sunting: Awalnya saya menerima angka terbatas tetapi saya menyimpan 3 byte ketika @ user81655 menunjukkan bahwa saya hanya perlu mendukung bilangan bulat positif (walaupun saya benar-benar menerima bilangan bulat non-negatif).
sumber
r*=++i/(x-y?(y=x,c=1):++c),y=r=-1)|-r
?*=
meskipun karena memperkenalkan kesalahan pembulatan.Pyth, 11 byte
Suite uji
Menggunakan formula standar,
n! / (count1! * count2! * ...)
,, kecuali bahwa faktorial dari penghitungan ditemukan dengan menghitung berapa kali setiap elemen terjadi dalam awalan yang mengarah ke itu, kemudian mengalikan semua angka-angka tersebut bersama-sama.Penjelasan:
sumber
Pyth -
1412 byteTest Suite .
sumber
Ruby,
7574 byteAgak berharap
Math
modul Ruby memiliki fungsi faktorial sehingga saya tidak harus membangun sendiri.sumber
CJam, 17 byte
Uji di sini.
Penjelasan
sumber
Jelly, 8 byte
Cobalah online!
sumber
J, 13 byte
Pemakaian
Penjelasan
sumber