Sync
This commit is contained in:
parent
6f050a029e
commit
776bba907c
3887 changed files with 59894 additions and 7280 deletions
15
Task/Power-set/D/power-set-1.d
Normal file
15
Task/Power-set/D/power-set-1.d
Normal 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;
|
||||
}
|
||||
28
Task/Power-set/D/power-set-2.d
Normal file
28
Task/Power-set/D/power-set-2.d
Normal 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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue