問題定義
指定されたセットのpowersetを印刷します。例えば:
[1, 2, 3] => [[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
各要素は別々の行に印刷されるため、上記の例は次のように印刷されます。
[]
[1]
[2]
...
[1, 2, 3]
サンプルコード(Dのpythonの例はこちら):
import std.stdio;
string[][] powerset(string[] set) {
if (set.length == 1) {
return [set, []];
}
string[][] ret;
foreach (item; powerset(set[1 .. $])) {
ret ~= set[0]~item;
ret ~= item;
}
return ret;
}
void main(string[] argv) {
foreach (set; powerset(argv[1 .. $]))
writeln(set);
}
入力
要素は引数として渡されます。たとえば、上記の例は、次の名前のプログラムに渡さpowerset
れます。
powerset 1 2 3
引数は英数字になります。
ルール
- io以外のライブラリはありません
- 出力を注文する必要はありません
- 電源セットを保存する必要はなく、印刷するだけです
- セット内の要素は、例えば(区切る必要があり
1,2,3
、[1,2,3]
かつ['1','2','3']
許容可能ですが、123
ではありません- 末尾の区切り文字は問題ありません(例
1,2,3, == 1,2,3
)
- 末尾の区切り文字は問題ありません(例
- ベストはバイト数に基づいて決定されます
最適な解決策は、最初の提出から10日以内に決定されます。
lambda L:reduce(lambda r,x:r+[s+[x]for s in r],L,[[]])
。