RosettaCodeData/Task/Non-continuous-subsequences/D/non-continuous-subsequences...

19 lines
482 B
D

T[][] ncsub(T)(in T[] seq, in uint s=0) pure nothrow @safe {
if (seq.length) {
typeof(return) aux;
foreach (ys; ncsub(seq[1 .. $], s + !(s % 2)))
aux ~= seq[0] ~ ys;
return aux ~ ncsub(seq[1 .. $], s + s % 2);
} else
return new typeof(return)(s >= 3, 0);
}
void main() @safe {
import std.stdio;
[1, 2, 3].ncsub.writeln;
[1, 2, 3, 4].ncsub.writeln;
foreach (const nc; [1, 2, 3, 4, 5].ncsub)
nc.writeln;
}