Diberikan daftar bilangan bulat kosong, hasilkan setiap kemungkinan partisi dari daftar di mana setiap partisi adalah sublist kosong.
Jadi untuk daftar [1, 2, 3, 4]
hasilnya adalah:
[[1, 2, 3, 4]]
[[1, 2, 3], [4]]
[[1, 2], [3, 4]]
[[1, 2], [3], [4]]
[[1], [2, 3, 4]]
[[1], [2, 3], [4]]
[[1], [2], [3, 4]]
[[1], [2], [3], [4]]
Urutan daftar dalam output tidak masalah, jadi [[1, 2, 3, 4]]
bisa menjadi yang pertama, terakhir, atau di mana pun. Urutan elemen harus dilestarikan.
Ini kode-golf, jadi jawaban tersingkat menang.
Terkait: Partisi daftar!
[...]
dalam format output? (Selama partisi jelas dipisahkan, misalnya dengan linefeeds.):
sebagai pemisah daftar tetapi dalam output, partisi itu sendiri tidak dibungkus dengan pasangan tambahan[...]
.[
dan terakhir]
dari setiap baris?Jawaban:
Jelly , 2 byte
Cobalah online!
sumber
Retina ,
2719 byteHitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
Penjelasan
Tentu saja ini menghitung semua partisi menggunakan pemrosesan string. Ide dasarnya adalah bahwa kita dapat menghasilkan semua partisi dengan memutuskan untuk masing-masing secara
,
terpisah apakah kita ingin membagi daftar di sana. Hal-hal semacam ini dapat dilakukan di Retina dengan mencocokkan masing-masing,
secara bergantian dan menggunakan pengganti yang memberikan kemungkinan keluaran.Input bertindak sebagai basis huruf: partisi di mana semua elemen masih dalam satu daftar.
Sekarang kami berulang kali (
+
) cocok dengan1
koma pertama (,
), pada setiap baris (%
) (memperlakukan baris itu sebagai string terpisah, yang relevan untuk$'
dan `` $ 1 `dalam substitusi).Koma itu akan diganti dengan:
Ingatlah bahwa semua yang ada di depan pertandingan dan setelah pertandingan tetap ada di dalam string, jadi hasil penuh sebenarnya
$`;$'¶$`];[$'
yang menjelaskan mengapa kita memasukkan akhiran dan awalan dalam urutan itu.Loop ini berhenti setelah semua koma hilang.
Akhirnya, ganti koma dengan koma lagi untuk mencocokkan format input.
sumber
Pure Bash, 28
Di sini, daftar dipisahkan dengan titik dua, dan terkandung dalam tanda kurung. Misalnya dalam pertanyaan, daftar input akan
1:2:3:4
dan hasilnya adalah:Cobalah online .
${1//:/REPLACEMENT}
menggantikan titik dua$1
dengan{:,]:[\}
[1{:,]:[}2{:,]:[}3{:,]:[}4]
\
lolos dengan hati-hati ) menyebabkan ekspansi brace terjadi terakhir dan memberikan hasil yang diinginkan.Jika perlu untuk mencocokkan dengan
[[ , , ...]]
format yang diberikan , maka kita dapat melakukan ini sebagai gantinya:Pure Bash, 47
Cobalah online .
sumber
Pyth , 2 byte
Dengan input
[1, 2, 3, 4]
(misalnya).Penjelasan :
./
adalah operator partisi. Ini mengembalikan semua divisi dari daftar input menjadi sub-daftar terpisah. Masukan secara implisit dimasukkan ke program.Uji secara online!
sumber
05AB1E , 5 byte
Cobalah online!
sumber
.œ
:: Cobalah online.Python 3 ,
827266 byteCobalah online!
-5 byte terima kasih kepada @JonathanAllan
sumber
l
pada akhirnyaHaskell ,
595549 byteCobalah online!
Solusi rekursif. Contoh penggunaan:
p [1,2,3]
pengembalian[[[1,2,3]],[[1,2],[3]],[[1],[2,3]],[[1],[2],[3]]]
.-6 byte terima kasih kepada xnor !
sumber
do a:b<-p r;[(x:a):b,[x]:a:b]
(ini mengubah urutan daftar).<*>
lakukan persis apa yang Anda inginkan[\(a:b)->(x:a):b,([x]:)]<*>p r
, meskipun itu lebih lama daripadado
karena lambda pertama tampaknya membutuhkan kecocokan pola.J , 42 byte
Hasilkan semua sublist partiton dengan membuat tombol untuk sub-partisi partisi dengan panjang 1 dan iterasi ke panjang daftar input. Setiap sublist partisi kemudian dibentuk dengan memilih dari tombol.
Sebagai contoh, berikut adalah proses membuat kunci untuk daftar panjang 4.
Cobalah online!
sumber
J ,
2624 byteCobalah online!
sumber
Brachylog , 2 byte
Cobalah online!
Pengajuan fungsi yang menghasilkan output melalui bertindak sebagai generator. (TIO link berisi kode tambahan untuk menjadikan ini menjadi program lengkap, untuk tujuan pengujian.)
Secara kebetulan, meskipun secara teknis bukan builtin, ini sangat umum digunakan di Brachylog sehingga a) mungkin layak untuk representasi byte tunggal, dan b)
c
builtin dapat mengambil parameter untuk membuat pernyataan tentang inputnya (sedangkan dengan sebagian besar builtin, parameter berbicara tentang cara menghasilkan output ).Penjelasan
sumber
APL, 26 byte
Uji:
Penjelasan:
X←⍴1↓⍵
:X
adalah panjang⍵
(daftar input) dengan elemen pertama dijatuhkan⍳2*X
: angka [1..2 ^ X](X⍴2)⊤
: basis-2 representasi angka-angka itu, denganX
posisi (yaituX
dirinya akan membungkus ke0
).↓⍉
: memutar matriks dan membaginya di sepanjang garis (⊤
memberikan sebagai hasilnya matriks dengan angka di sepanjang kolom), memberikan array vektor bit1,¨
: tambahkan 1 untuk setiap bit vektor.⊂∘⍵¨
: untuk setiap vektor bit, bagi⍵
masing-masing 1.sumber
Haskell , 45 byte
Cobalah online!
Saya menemukan solusi ini beberapa waktu lalu ketika memikirkan tentang tip Haskell .
sumber
Python , 90 byte
kalah oleh ovs (membuat sesuatu yang saya pikir saya sudah mencoba bekerja: p)
Fungsi rekursif yang membangun daftar partisi dari irisan input dengan ekor tercapai ketika irisan memiliki panjang 1.
Cobalah online!
The
exec
menghemat 4 byte ataswhile
atau 3 di atasfor
lingkaran (bawah) karena itu berarti hanya dua\n
s daripada dua tingkat lekukan, yang memungkinkan seluruh fungsi berada di satu baris (sementara urutan mengiris tidak masalah).sumber
Python 3 , 67 byte
Cobalah online!
sumber
Haskell, 59 byte
sumber
Ruby ,
6257 byteCobalah online!
Bagaimana itu bekerja:
sumber
JavaScript (ES6), 87 byte
Penjelasan:
b
adalah daftarc
sublist sebelumnya, adalah sublist saat ini, (yang dimulai sebagai elemen pertama dari array, karena itu harus ada dalam sublist pertama) sementara itud
adalah daftar semua sub daftar. Sisa elemen array kemudian diproses secara rekursif. Dalam setiap kasus ada dua opsi: elemen berikutnya ditambahkan ke sublist saat ini, atau sublist saat ini selesai dan elemen berikutnya memulai sublist baru. Hasil rekursif kemudian digabungkan bersama. Ketika array habis, daftar daftar semua sublists adalah hasilnya.sumber
APL (NARS) 38 char, 76 byte
ini menggunakan fungsi Nars 11 1‼ kk tetapi sangat lambat, tidak dapat digunakan untuk array arg dari 9 elemen ...
di bawah ini adalah fungsi yang tidak menggunakan bawaan:
kami melihat jenis setiap hasil:
Saya tidak tahu cara kerjanya, itu hanya coba heuristik ...
Mungkin saya membuat kesalahan; kedua fungsi membangun partisi dari daftar input apa pun dan tidak hanya 1 2 ... n.
sumber
Aksioma, 251 byte
Jika seseorang menemukan sesuatu yang lebih baik ... ungof dan uji:
Jika ini terlalu banyak ruang mengatakan itu dan saya menghapus contoh ...
sumber