// TypeScript
function countAndSay(n: number): string {
    if (n === 1) {
        return "1";
    }

    const s = countAndSay(n - 1);
    const len = s.length;

    let ans = '';

    let count = 0;
    for (let i = 0; i < len; i++) {
        count++;
        if (i < len - 1 && s[i] === s[i+1]) {
            continue;
        }
        ans += (count + '' + s[i]);
        count = 0;
    }

    if (count !== 0) {
        ans += (count + '' + s[len-1]);
    }

    return ans;
};

const countAndSayIterative = (n: number): string => {
    if (n === 1) {
        return '1';
    }

    let ans = '1';

    while (n > 1) {
        const len = ans.length;
        let temp  = '';

        let count = 0;
        for (let i = 0; i < len; i++) {
            count++;
            if (i < len - 1 && ans[i] === ans[i+1]) {
                continue;
            }
            temp += (count + '' + ans[i]);
            count = 0;
        }

        if (count) {
            temp += (count + '' + ans[len-1]);
        }
        ans = temp;
        n--;
    }


    return ans;
};