Определение проблемы
Распечатайте 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
- Выход не должен быть заказан
- Powerset не должен быть сохранен, только напечатан
- Элементы в наборе должны быть разделены (например
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,[[]])
.