blob: 446555701f78ab0bf8a4994284511a20169f6cb5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
export function* permutations(pattern: string) {
let totalPerms = 1;
for (const char of pattern) {
if (char !== '0' && char !== '1') {
totalPerms *= 2;
}
}
for (let permIndex = 0; permIndex < totalPerms; permIndex++) {
let varIndex = 0;
let value = 0;
for (const char of pattern) {
value *= 2;
if (char === '1') {
value++;
} else if (char !== '0') {
value += permIndex & (1 << varIndex) ? 1 : 0;
varIndex++;
}
}
yield value;
}
}
|