Skip to content

Commit a09e889

Browse files
committed
Improve ids function
Fixes: #5
1 parent 0222be2 commit a09e889

File tree

1 file changed

+21
-14
lines changed

1 file changed

+21
-14
lines changed

Exercises/1-ids.js

+21-14
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,27 @@
11
'use strict';
22

3-
const ids = function* () {
4-
const free = ['0'];
5-
const prepared = { has: false, value: '' };
3+
const digits = ['00', '10', '1'];
4+
const LEADING_ONE = 2;
5+
6+
const inc = num => {
7+
let i = num.length - 1;
8+
let add = 1;
9+
while (i > 0 && add === 1) {
10+
const newAdd = num[i] & add;
11+
num[i] ^= add;
12+
add = newAdd;
13+
i--;
14+
}
615

7-
while (true) {
8-
if (prepared.has) {
9-
prepared.has = false;
10-
yield prepared.value;
11-
}
12-
const nextFree = free.shift();
13-
free.push('01' + nextFree);
14-
free.push('00' + nextFree);
15-
prepared.value = '11' + nextFree;
16-
prepared.has = true;
17-
yield '10' + nextFree;
16+
if (i === 0 && add === 1) {
17+
num.push(0);
18+
}
19+
};
20+
21+
const ids = function* () {
22+
const num = [LEADING_ONE, 0];
23+
for (;; inc(num)) {
24+
yield num.map(d => digits[d]).join('');
1825
}
1926
};
2027

0 commit comments

Comments
 (0)