Use this for creating the power set of x
:
function power(x) {
var r = [""], // start with empty set/string
l = 1;
for (var i=0; i<x.length; l=1<<++i) // OK, l is just r[i].length, but this looks nicer :)
for (var j=0; j<l; j++) {
r.push(r[j].slice(0)); // copy
r[j] += x[i];
}
return r;
}
Usage:
> power(["ab", "cd", "ef", "gh"])
["abcdefgh", "cdefgh", "abefgh", "efgh", "abcdgh", "cdgh", "abgh", "gh", "abcdef", "cdef", "abef", "ef", "abcd", "cd", "ab", ""]
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…