Partisi daftar


9

Jawaban atas pertanyaan ini terlalu panjang

Tantangan Anda adalah menulis fungsi pemartisian dalam jumlah karakter terkecil.

Contoh input

['a', 'b', 'c']

Contoh keluaran

[(('a'),('b'),('c')),
 (('a', 'b'), ('c')),
 (('a', 'c'), ('b')),
 (('b', 'c'), ('a')),
 (('a', 'b', 'c'))]

Input dapat berupa daftar / array / set / string dll. Apa pun yang termudah untuk diproses oleh fungsi Anda

Anda juga dapat memilih format output yang sesuai dengan diri Anda selama strukturnya jelas.

Fungsi Anda harus bekerja setidaknya untuk 6 item dalam input


haruskah partisi yang kosong juga menjadi bagian dari output?
FUZxxl

Jawaban:


3

GolfScript (43 karakter)

{[[]]:E\{:v;{:^E+1/{^1$-\[~[v]+]+}/}%}/}:P;

atau

{[[]]:E\{:v;{:^E+1/{^1$-\{[v]+}%+}/}%}/}:P;

Format input yang sama, format output, dan nama fungsi sebagai solusi Howard. Tidak ada pemaksaan kasar: ini mengambil pendekatan berulang sederhana menambahkan satu elemen dari daftar input ke partisi setiap kali sepanjang lingkaran luar.


6

GolfScript, 51 karakter

{[[]]\{[.;]`{1$[1$]+@@`1$`{[2$]-@@[+]+}++/}+%}/}:P;

Script mendefinisikan variabel Pyang mengambil array dari atas tumpukan dan mendorong kembali daftar semua partisi, misalnya

[1 2] P            # => [[[1] [2]] [[1 2]]]
["a" "b" "c"] P    # => [[["a"] ["b"] ["c"]] [["b"] ["a" "c"]] [["a"] ["b" "c"]] [["a" "b"] ["c"]] [["a" "b" "c"]]]

Itu juga berfungsi pada daftar yang lebih besar:

6, P ,p            # prints 203, i.e. Bell number B6
8, P ,p            # 4140

Anda dapat melakukan tes sendiri secara online .


6

J, 51 karakter

([:<a:-.~])"1~.((>:@i.#:i.@!)#l)<@;/."1[l=:;:1!:1[1

Mengambil input dari keyboard, item dipisahkan oleh spasi:

   ([:<a:-.~])"1~.((>:@i.#:i.@!)#l)<@;/."1[l=:;:1!:1[1
a b c
+-----+------+------+------+-------+
|+---+|+--+-+|+--+-+|+-+--+|+-+-+-+|
||abc|||ab|c|||ac|b|||a|bc|||a|b|c||
|+---+|+--+-+|+--+-+|+-+--+|+-+-+-+|
+-----+------+------+------+-------+

1

Haskell, 90 87 71 66

Disimpan 5 byte berkat nimi .

x#[]=[[[x]]]
x#(y:s)=((x:y):s):map(y:)(x#s)
p=foldr((=<<).(#))[[]]

Contoh:

*Main> p "abc"
[["abc"],["bc","a"],["ac","b"],["c","ab"],["c","b","a"]]

Beberapa byte untuk menyimpan: mengatur ulang kurung di garis-2 #: :map(y:)(x#s)dan mengubah lambda menjadi versi titik bebas: foldr((=<<).(#))[[]].
nimi

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.