リストのパーティション


9

この質問の答えは長すぎます

あなたの課題は、最小の文字数でパーティション関数を書くことです。

入力例

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

出力例

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

入力は、リスト/配列/セット/文字列などにすることができます。関数が処理するのが最も簡単なものであれば何でもかまいません。

構造が明確である限り、自分に合うように出力形式を選択することもできます。

関数は、入力の少なくとも6項目で機能する必要があります


空のパーティションも出力の一部になりますか?
FUZxxl 2015

回答:


3

GolfScript(43文字)

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

または

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

ハワードのソリューションと同じ入力形式、出力形式、および関数名。力ずくで強制することはありません。これは、外側のループを一周するたびに、入力リストからパーティションに1つの要素を追加するという単純な反復アプローチをとります。


6

GolfScript、51文字

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

スクリプトはP、スタックの最上部から配列を取得し、すべてのパーティションのリストをプッシュバックする変数を定義します。たとえば、

[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"]]]

より大きなリストでも機能します。

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

あなたは可能オンライン独自のテストを行います


6

J、51文字

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

キーボードから入力を受け取り、項目はスペースで区切られます:

   ([:<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

nimiのおかげで5バイト節約されました。

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

例:

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

保存するには数バイト:の2行目の括弧を並べ替える#:map(y:)(x#s)ポイント・無料版にラムダを回します:foldr((=<<).(#))[[]]
nimi 2015

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.