Permutations by swapping: Difference between revisions

Updated second D entry
(Updated both D versions)
(Updated second D entry)
Line 423:
typeof(return) r;
foreach (immutable i, item; sPermu(items - 1)) {
if //r.put((i % 2 ? iota(cast(int)item.length, -1, -1) :
// r ~= iota(cast(int)item.length, -1,+ -1))
// .map!(i => item[0 .. i] ~ (items-1) ~ item[i..$]));
immutable f=(in int i)=>item[0..i] ~ (items-1) ~ item[i..array$];
elser ~= (i % 2) ?
r ~= iota(cast(int)item.length, +-1, -1).map!f.array :
.map!iota(i => item[0 ..length i]+ ~ (items-1) ~ item[i.map!f.$])array;
.array;
}
return r;
}
 
//return sPermu(n).zip([1, -1].cycle);
auto r = sPermu(n);
return r.length.iota.map!(i => tuple(r[i], i % 2 ? -1 : 1));
}