Look and Say Sequence Generator – Javascript (ECMAscript 6)

function* lookAndSay(num) {
    num += '';
    while (num = generateNextNode(num)) {
        yield num;
    }

    function generateNextNode(num) {
        let res = '';
        for (let i = 0; i < num.length; i++) {
            let current = num[i];
            let currentCount = 1;
            for (let innerIndex = i + 1; innerIndex < num.length; innerIndex++) {
                let next = num[innerIndex];
                if (current === next) {
                    currentCount++;
                } else {
                    i = innerIndex - 1;
                    break;
                }

                i = innerIndex;
            }

            res += `${currentCount}${current}`;
        }

        return res;
    }
}

// Example
let lookSequence = lookAndSay(0);
console.log(lookSequence.next().value);
console.log(lookSequence.next().value);
console.log(lookSequence.next().value);
console.log(lookSequence.next().value);
console.log(lookSequence.next().value);

Leave a Reply

Your email address will not be published. Required fields are marked *