This commit is contained in:
Ingy döt Net 2013-10-27 22:24:23 +00:00
parent 6f050a029e
commit 776bba907c
3887 changed files with 59894 additions and 7280 deletions

View file

@ -0,0 +1,15 @@
T[][] powerSet(T)(in T[] s) pure nothrow {
auto r = new typeof(return)(1, 0);
foreach (e; s) {
typeof(return) rs;
foreach (x; r)
rs ~= x ~ [e];
r ~= rs;
}
return r;
}
void main() {
import std.stdio;
[1, 2, 3].powerSet.writeln;
}

View file

@ -0,0 +1,28 @@
auto powerSet(T)(T[] xs) {
auto output = new T[xs.length];
immutable size_t len = 1U << xs.length;
struct Result {
size_t bits;
@property empty() const pure nothrow { return bits == len; }
void popFront() pure nothrow { bits++; }
@property save() pure nothrow { return this; }
T[] front() nothrow {
size_t pos = 0;
foreach (immutable size_t i; 0 .. xs.length)
if (bits & (1 << i))
output[pos++] = xs[i];
return output[0 .. pos];
}
}
return Result();
}
version (power_set2_main) {
void main() {
import std.stdio;
[1, 2, 3].powerSet.writeln;
}
}