Tantangan Anda adalah sederhana: Mengingat integer N , ouput setiap daftar bilangan bulat positif yang jumlah untuk N . Misalnya, jika inputnya 5, Anda harus output
[1, 1, 1, 1, 1]
[1, 1, 1, 2]
[1, 1, 3]
[1, 2, 2]
[1, 4]
[2, 3]
[5]
Daftar ini tidak harus berupa output dalam urutan tertentu, juga angka-angka di dalam setiap daftar. Misalnya, ini juga akan menjadi output yang dapat diterima untuk '5':
[1, 1, 1, 2]
[5]
[3, 1, 1]
[2, 1, 2]
[4, 1]
[1, 1, 1, 1, 1]
[2, 3]
Anda dapat dengan aman berasumsi bahwa input akan menjadi bilangan bulat positif, dan Anda dapat mengambil nomor ini dalam format apa pun yang masuk akal.
Anda tidak boleh menggunakan fungsi bawaan apa pun yang melakukan ini.
Jika program Anda gagal atau terlalu lama untuk N besar ini OK, tetapi Anda harus paling tidak menghasilkan output yang benar untuk 15 pertama.
Celah standar berlaku, dan jawaban tersingkat dalam byte menang!
Tes IO
1:
[[1]]
2:
[[1, 1], [2]]
3:
[[1, 1, 1], [1, 2], [3]]
4:
[[1, 1, 1, 1], [1, 1, 2], [1, 3], [2, 2], [4]]
5:
[[1, 1, 1, 1, 1], [1, 1, 1, 2], [1, 1, 3], [1, 2, 2], [1, 4], [2, 3], [5]]
7:
[[1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 2], [1, 1, 1, 1, 3], [1, 1, 1, 2, 2], [1, 1, 1, 4], [1, 1, 2, 3], [1, 1, 5], [1, 2, 2, 2], [1, 2, 4], [1, 3, 3], [1, 6], [2, 2, 3], [2, 5], [3, 4], [7]]
10:
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 2], [1, 1, 1, 1, 1, 1, 1, 3], [1, 1, 1, 1, 1, 1, 2, 2], [1, 1, 1, 1, 1, 1, 4], [1, 1, 1, 1, 1, 2, 3], [1, 1, 1, 1, 1, 5], [1, 1, 1, 1, 2, 2, 2], [1, 1, 1, 1, 2, 4], [1, 1, 1, 1, 3, 3], [1, 1, 1, 1, 6], [1, 1, 1, 2, 2, 3], [1, 1, 1, 2, 5], [1, 1, 1, 3, 4], [1, 1, 1, 7], [1, 1, 2, 2, 2, 2], [1, 1, 2, 2, 4], [1, 1, 2, 3, 3], [1, 1, 2, 6], [1, 1, 3, 5], [1, 1, 4, 4], [1, 1, 8], [1, 2, 2, 2, 3], [1, 2, 2, 5], [1, 2, 3, 4], [1, 2, 7], [1, 3, 3, 3], [1, 3, 6], [1, 4, 5], [1, 9], [2, 2, 2, 2, 2], [2, 2, 2, 4], [2, 2, 3, 3], [2, 2, 6], [2, 3, 5], [2, 4, 4], [2, 8], [3, 3, 4], [3, 7], [4, 6], [5, 5], [10]]
Kasing uji super besar: 15 harus menampilkan ini
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5], [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2], [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4], [1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3], [1, 1, 1, 1, 1, 1, 1, 1, 1, 6], [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3], [1, 1, 1, 1, 1, 1, 1, 1, 2, 5], [1, 1, 1, 1, 1, 1, 1, 1, 3, 4], [1, 1, 1, 1, 1, 1, 1, 1, 7], [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2], [1, 1, 1, 1, 1, 1, 1, 2, 2, 4], [1, 1, 1, 1, 1, 1, 1, 2, 3, 3], [1, 1, 1, 1, 1, 1, 1, 2, 6], [1, 1, 1, 1, 1, 1, 1, 3, 5], [1, 1, 1, 1, 1, 1, 1, 4, 4], [1, 1, 1, 1, 1, 1, 1, 8], [1, 1, 1, 1, 1, 1, 2, 2, 2, 3], [1, 1, 1, 1, 1, 1, 2, 2, 5], [1, 1, 1, 1, 1, 1, 2, 3, 4], [1, 1, 1, 1, 1, 1, 2, 7], [1, 1, 1, 1, 1, 1, 3, 3, 3], [1, 1, 1, 1, 1, 1, 3, 6], [1, 1, 1, 1, 1, 1, 4, 5], [1, 1, 1, 1, 1, 1, 9], [1, 1, 1, 1, 1, 2, 2, 2, 2, 2], [1, 1, 1, 1, 1, 2, 2, 2, 4], [1, 1, 1, 1, 1, 2, 2, 3, 3], [1, 1, 1, 1, 1, 2, 2, 6], [1, 1, 1, 1, 1, 2, 3, 5], [1, 1, 1, 1, 1, 2, 4, 4], [1, 1, 1, 1, 1, 2, 8], [1, 1, 1, 1, 1, 3, 3, 4], [1, 1, 1, 1, 1, 3, 7], [1, 1, 1, 1, 1, 4, 6], [1, 1, 1, 1, 1, 5, 5], [1, 1, 1, 1, 1, 10], [1, 1, 1, 1, 2, 2, 2, 2, 3], [1, 1, 1, 1, 2, 2, 2, 5], [1, 1, 1, 1, 2, 2, 3, 4], [1, 1, 1, 1, 2, 2, 7], [1, 1, 1, 1, 2, 3, 3, 3], [1, 1, 1, 1, 2, 3, 6], [1, 1, 1, 1, 2, 4, 5], [1, 1, 1, 1, 2, 9], [1, 1, 1, 1, 3, 3, 5], [1, 1, 1, 1, 3, 4, 4], [1, 1, 1, 1, 3, 8], [1, 1, 1, 1, 4, 7], [1, 1, 1, 1, 5, 6], [1, 1, 1, 1, 11], [1, 1, 1, 2, 2, 2, 2, 2, 2], [1, 1, 1, 2, 2, 2, 2, 4], [1, 1, 1, 2, 2, 2, 3, 3], [1, 1, 1, 2, 2, 2, 6], [1, 1, 1, 2, 2, 3, 5], [1, 1, 1, 2, 2, 4, 4], [1, 1, 1, 2, 2, 8], [1, 1, 1, 2, 3, 3, 4], [1, 1, 1, 2, 3, 7], [1, 1, 1, 2, 4, 6], [1, 1, 1, 2, 5, 5], [1, 1, 1, 2, 10], [1, 1, 1, 3, 3, 3, 3], [1, 1, 1, 3, 3, 6], [1, 1, 1, 3, 4, 5], [1, 1, 1, 3, 9], [1, 1, 1, 4, 4, 4], [1, 1, 1, 4, 8], [1, 1, 1, 5, 7], [1, 1, 1, 6, 6], [1, 1, 1, 12], [1, 1, 2, 2, 2, 2, 2, 3], [1, 1, 2, 2, 2, 2, 5], [1, 1, 2, 2, 2, 3, 4], [1, 1, 2, 2, 2, 7], [1, 1, 2, 2, 3, 3, 3], [1, 1, 2, 2, 3, 6], [1, 1, 2, 2, 4, 5], [1, 1, 2, 2, 9], [1, 1, 2, 3, 3, 5], [1, 1, 2, 3, 4, 4], [1, 1, 2, 3, 8], [1, 1, 2, 4, 7], [1, 1, 2, 5, 6], [1, 1, 2, 11], [1, 1, 3, 3, 3, 4], [1, 1, 3, 3, 7], [1, 1, 3, 4, 6], [1, 1, 3, 5, 5], [1, 1, 3, 10], [1, 1, 4, 4, 5], [1, 1, 4, 9], [1, 1, 5, 8], [1, 1, 6, 7], [1, 1, 13], [1, 2, 2, 2, 2, 2, 2, 2], [1, 2, 2, 2, 2, 2, 4], [1, 2, 2, 2, 2, 3, 3], [1, 2, 2, 2, 2, 6], [1, 2, 2, 2, 3, 5], [1, 2, 2, 2, 4, 4], [1, 2, 2, 2, 8], [1, 2, 2, 3, 3, 4], [1, 2, 2, 3, 7], [1, 2, 2, 4, 6], [1, 2, 2, 5, 5], [1, 2, 2, 10], [1, 2, 3, 3, 3, 3], [1, 2, 3, 3, 6], [1, 2, 3, 4, 5], [1, 2, 3, 9], [1, 2, 4, 4, 4], [1, 2, 4, 8], [1, 2, 5, 7], [1, 2, 6, 6], [1, 2, 12], [1, 3, 3, 3, 5], [1, 3, 3, 4, 4], [1, 3, 3, 8], [1, 3, 4, 7], [1, 3, 5, 6], [1, 3, 11], [1, 4, 4, 6], [1, 4, 5, 5], [1, 4, 10], [1, 5, 9], [1, 6, 8], [1, 7, 7], [1, 14], [2, 2, 2, 2, 2, 2, 3], [2, 2, 2, 2, 2, 5], [2, 2, 2, 2, 3, 4], [2, 2, 2, 2, 7], [2, 2, 2, 3, 3, 3], [2, 2, 2, 3, 6], [2, 2, 2, 4, 5], [2, 2, 2, 9], [2, 2, 3, 3, 5], [2, 2, 3, 4, 4], [2, 2, 3, 8], [2, 2, 4, 7], [2, 2, 5, 6], [2, 2, 11], [2, 3, 3, 3, 4], [2, 3, 3, 7], [2, 3, 4, 6], [2, 3, 5, 5], [2, 3, 10], [2, 4, 4, 5], [2, 4, 9], [2, 5, 8], [2, 6, 7], [2, 13], [3, 3, 3, 3, 3], [3, 3, 3, 6], [3, 3, 4, 5], [3, 3, 9], [3, 4, 4, 4], [3, 4, 8], [3, 5, 7], [3, 6, 6], [3, 12], [4, 4, 7], [4, 5, 6], [4, 11], [5, 5, 5], [5, 10], [6, 9], [7, 8], [15]]
Katalog
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
sumber
Jawaban:
Pyth,
109 byteTidak terlalu yakin apakah ini tidak curang, tetapi aturan hanya mengatakan seseorang tidak dapat menggunakan partisi integer (itu tidak dinyatakan dengan jelas dalam pertanyaan itu sendiri, tetapi komentar oleh OP dalam pertanyaan mengatakan integer partisi). Saya menggunakan partisi daftar
string, yang membuat irisan daftar yang menyambung hingga daftar "ibu". Saya percaya saya harus berterima kasih kepada @Maltysen untuk gagasan menggunakan daftar daripada string.n = 15 membutuhkan waktu kurang dari satu detik di mesin saya.
Dalam pseudocode dataflow:
Cobalah online di sini.
sumber
{mSlMd./*N
menghemat satu bytePyth, 18 byte
Cobalah online! (The
y
pada akhirnya digunakan untuk memanggil fungsi)Ini cukup cepat.
Ini menggunakan rekursi. Jika input
b
, metode saya akan menghasilkan partisi dari0
keb-1
, dan kemudian menghasilkan partisi yang benar dari masing-masing.Misalnya ketika
b=4
:b=0
memberi[[]]
b=1
memberi[[1]]
b=2
memberi[[2], [1, 1]]
b=3
memberi[[3], [1, 2], [1, 1, 1]]
Kemudian, untuk setiap partisi
b=0
, tambahkan4
(untuk membuat jumlah 4); untuk setiap partisib=1
, tambahkan3
(untuk membuat jumlah4
); dll.Ini terutama cara kerjanya.
sumber
MATL , 20 byte
Cobalah online!
Untuk input
15
dibutuhkan sekitar 2 detik dalam kompiler online.Penjelasan
Ini berfungsi dengan menghasilkan titik partisi dan kemudian mengonversi ke panjang partisi . Yang saya maksud dengan ini adalah sebagai berikut. Diberikan input N = 5, kemungkinan partisi adalah [2 2 1]. Ini diwakili oleh titik partisi [0 2 4 5], sehingga perbedaan (atau panjang) titik partisi yang berurutan memberikan hasil partisi dari nomor input.
Semua array poin partisi dimulai dengan 0 dan diakhiri dengan N . Jumlah k titik tengah bervariasi dari 0 hingga N -1. Untuk N dan k yang diberikan, titik-titik perantara dapat dihasilkan sebagai kombinasi angka [1, 2, ..., N -1] yang diambil k pada suatu waktu.
Beberapa array titik partisi dapat menimbulkan hasil yang sama dalam urutan yang berbeda. Misalnya, titik partisi [0 1 3 5] akan memberikan panjang partisi [1 2 2], yaitu sama dengan yang sebelumnya [2 2 1] hanya dalam urutan yang berbeda. Ini harus diperhitungkan dengan menyortir setiap larik panjang partisi dan menghapus duplikat .
sumber
Haskell, 53 byte
sumber
J,
4942363532 byteIni diam-diam sekarang!
Membangun partisi integer dari n dengan membangun partisi integer dari 1 ke n . Menghitung hasil untuk n = 15 dalam milidetik.
Dimulai dengan partisi integer awal
[[1]]
yang sesuai dengan n = 1, buat partisi integer berikutnya dengan menggabungkan hasil dari dua operasi: menambahkan 1 untuk setiap partisi; menambah nilai terkecil dengan 1 di setiap partisi. Tentu saja, partisi duplikat akan dihapus. Untuk mendapatkan partisi integer n = 2 dan seterusnya,Pemakaian
Penjelasan
Karena J tidak mendukung array yang tidak rata, setiap partisi harus dikotak sehingga mereka tidak akan menjadi nol saat ditambahkan ke partisi lain.
sumber
Python, 65 byte
Python 3
Fungsi ini mengakumulasi partisi dan mencetak output, bercabang pada pilihan. Ini memutuskan berapa banyak 1 untuk dimasukkan ke dalam partisi, berapa banyak 2, dan seterusnya. Untuk setiap nilai
i
, itu baiki
, dan berkurangn
menjadin-i
, ataui+1
Jika
i>n
, maka tidak ada lagi bagian yang dapat dibuat, sehingga berhenti. Jikan
jatuh ke0
, partisi berhasil dan dicetak.Python 2
Metode rekursif yang menampilkan daftar partisi. Seperti dengan kode Python 3, itu menghitung ukuran bagian
i
dan memutuskan pada setiap langkah apakah akan menambah bagian lain ukurani
atau berhenti.Keduanya melakukan
n=15
hampir secara instan.sumber
Javascript, 194 byte
Non-minified
Menemukan keunikan dengan menyortir dan membandingkan ke suatu string adalah suatu peretasan, tetapi mungkin menghemat ruang.
sumber
Quite a hack but saves space
Itulah tepatnya tentang situs ini. : DPython 3.5,
8272 byteMengembalikan satu set tupel. n = 15 selesai secara instan.
Mengujinya pada repl.it .
sumber
Haskell, 44 byte
Fungsi bantu
n%m
memberikan partisin
menjadi beberapa bagian≥m
, dengan fungsi utama menggunakanm=1
. Ini cabang dari setiap entri pertamaj
denganm≤j≤n
, recursing pada partisi sisan-j
menjadi bagian-bagian yang setidaknyaj
. Kasing dasarn==0
hanya memberikan partisi kosong.sumber
Pyth, 17 byte
Menentukan fungsi bernama
y
. Cobalah online .sumber
Jelly , 9 byte
Cobalah online!
Bagaimana itu bekerja
sumber
J, 39 byte
Ini adalah kata kerja monadik yang mengambil integer dan mengembalikan array array kotak. Coba di sini. Pemakaian:
Pada input 15, ini berjalan sekitar satu detik di mesin saya.
Penjelasan
Tantangan ini segera tampak seperti pekerjaan untuk Katalog (
{
) dan Cut (;.
). Garis besar algoritme adalah:n
.n
array panjang boneka di sepanjang 1s, dan daftar panjang masing-masing bagian.Rupanya, Luis Mendo punya ide yang sama juga.
Penjelasan kode:
sumber
;.
lagi.Brachylog , 33 byte (Tidak bersaing)
Ini tidak bersaing karena perbaikan bug.
Ini membutuhkan waktu sekitar 1 detik untuk
15
di komputer saya. Untuk20
dan yang lebih besar, ini mogok denganOut of global stack
pengecualian.Penjelasan
Ini tidak menggunakan partisi bawaan jenis apa pun, dan sebaliknya menggunakan fakta itu
+
bekerja dua arah melalui kendala propagasi.Predikat utama:
Predikat 1:
sumber
Mathematica,
6254 bytePartisi dari integer n dapat ditemukan dengan memecahkan untuk n -tupel bilangan bulat non-negatif ( c 1 , c 2 , ..., c n ) sedemikian rupa sehingga c 1 + 2 c 2 + ... + n c n = n .
FrobeniusSolve
mampu menemukan semua solusi untuk persamaan ini yang digunakan untuk membuat banyak salinan dari nilai masing-masing untuk menemukan semua partisi integer dari n .sumber
FrobeniusSolve
tidak menemukan partisi bilangan bulat, ia menemukan semua solusi bilangan bulat non-negatifx1 ... xN
untuk persamaan dari bentuk yanga1 x1 + a2 x2 + ... aN xN = b
diberikana1 ... aN
danb
.JavaScript
(Firefox 30-57) 79ES6, 65 bytePort solusi Python @ xnor. (Seandainya saja aku memperhatikan bahwa kamu bisa berulang
m
jugan
...)sumber