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

19 lines
482 B
D
Raw Permalink Normal View History

2015-02-20 00:35:01 -05:00
T[][] ncsub(T)(in T[] seq, in uint s=0) pure nothrow @safe {
2013-04-10 23:57:08 -07:00
if (seq.length) {
2015-02-20 00:35:01 -05:00
typeof(return) aux;
foreach (ys; ncsub(seq[1 .. $], s + !(s % 2)))
2013-04-10 23:57:08 -07:00
aux ~= seq[0] ~ ys;
2015-02-20 00:35:01 -05:00
return aux ~ ncsub(seq[1 .. $], s + s % 2);
2013-04-10 23:57:08 -07:00
} else
2015-02-20 00:35:01 -05:00
return new typeof(return)(s >= 3, 0);
2013-04-10 23:57:08 -07:00
}
2015-02-20 00:35:01 -05:00
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;
2013-04-10 23:57:08 -07:00
}