aboutsummaryrefslogtreecommitdiff
path: root/benchmark/permutations.ts
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;
  }
}