OEIS A000009 menghitung jumlah partisi ketat dari bilangan bulat. SEBUAH partisi yang ketat dari bilangan bulat positif n
adalah himpunan bilangan bulat positif (sehingga tidak ada pengulangan diperbolehkan, dan ketertiban tidak peduli) bahwa jumlah untuk n
.
Sebagai contoh, 5 memiliki tiga partisi ketat: 5
, 4,1
, dan 3,2
.
10 memiliki sepuluh partisi:
10
9,1
8,2
7,3
6,4
7,2,1
6,3,1
5,4,1
5,3,2
4,3,2,1
Tantangan
Diberikan bilangan bulat negatif n
<1000, hasilkan jumlah partisi ketat yang dimilikinya.
Kasus uji:
0 -> 1
42 -> 1426
Berikut adalah daftar nomor partisi ketat dari 0 hingga 55, dari OEIS:
[1,1,1,2,2,3,4,5,6,8,10,12,15,18,22,27,32,38,46,54,64,76,89,104,122,142,165,192,222,256,296,340,390,448,512,585,668,760,864,982,1113,1260,1426,1610,1816,2048,2304,2590,2910,3264,3658,4097,4582,5120,5718,6378]
Ini adalah kode-golf , jadi solusi terpendek dalam byte menang.
sumber
subsequences
(+import
) pada jawaban saya sendiri, tetapi sejauh ini tidak berhasil.ES6, 64 byte
Bekerja dengan pengurangan percobaan rekursif.
k
adalah angka yang terakhir dikurangkan, dan angka berikutnya yang harus dikurangkan harus lebih besar (tetapi tidak terlalu besar sehingga jumlah yang lebih besar tidak dapat dikurangkan). 1 ditambahkan karena Anda selalu dapat mengurangin
sendiri. (Juga karena ini bersifat rekursif saya harus berhati-hati karena semua variabel saya adalah lokal.)sumber
Python, 68 byte
Panggil saja fungsi anonim melewati bilangan bulat negatif
n
sebagai argumen ... dan tunggu akhir jagat raya.sumber
n>0
, Anda menghemat satu byte dan pergi lebih cepat (saya yakin Anda berulang pada angka negatif): Preturn sum(...)if n else 1
Python 2, 49 byte
Cabang-cabang rekursi pada setiap peubah potensial
k
dari1
ken
untuk memutuskan apakah itu harus dimasukkan. Setiap sumum yang dimasukkan dikurangi dari jumlah yang diinginkann
, dan pada akhirnya, jikan=0
tetap, jalur itu dihitung.sumber
Haskell, 43 byte
Fungsi biner
n%k
menghitung jumlah partisi ketatn
menjadi beberapa bagian dengan bagian maksimumk
, sehingga fungsi yang diinginkan adalahf n=n%n
. Setiap nilaik
dapat dimasukkan, yang menurunn
dengank
, atau dikecualikan, dan bagaimanapun maksimum baruk
satu lebih rendah, memberikan rekursin%k=n%(k-1)+(n-k)%(k-1)
.sumber
n%k|q<-k-1=n%q+(n-k)%q
mencukur byte dari jalur 3.Julia, 53 byte
Ini adalah fungsi anonim yang menerima integer dan mengembalikan integer. Untuk menyebutnya, tetapkan ke variabel.
Kami mendapatkan partisi integer menggunakan
partitions
,filter
hanya mereka yang memiliki puncak yang berbeda,collect
ke dalam array, dan menemukan indeks terakhir (yaitu panjang) menggunakanendof
.sumber
Haskell, 58 byte
Contoh penggunaan:
map h [0..10]
->[1,1,1,2,2,3,4,5,6,8,10]
.Ini adalah pendekatan brute force sederhana. Periksa jumlah semua bagian dari
1..x
. Ini juga bekerja untukx == 0
, karena semua urutan dari[1..0]
adalah[[]]
dan jumlah dari[]
adalah0
.sumber
05AB1E , 8 byte
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
05AB1E , 5 byte
Cobalah online!
Catatan: ini sangat lambat dan akan kehabisan input lebih dari sekitar 20.
Penjelasan:
sumber