«Сжатие» исходной последовательности символов

Написать функцию, входным параметром которой является строка. Функция должна осуществлять «сжатие» исходной последовательности символов: каждая подпоследовательность, состоящая из более 4-х вхождений одного и того же символа, заменяется на текст x(k), где x – символ, а k – строка, являющаяся записью числа вхождений символа x в исходную последовательность. Число вхождений одного символа может быть как менее, так и более 9.

Есть набросок кода, но проблема в том, что выводит строку с любым кол-вом вхождений символов. Например, если строка "aaabbbb" - результат "а(3)b(4)". А нужно "aaabbbb", т.к символы не повторяются > 4 раз.

Ещё, например у нас есть строка "bbbbbccddddd", то должно получиться "b(5)ccd(5)"

НЕ ИСПОЛЬЗОВАТЬ СТРОКОВЫЕ МЕТОДЫ!

let str = "bbbbbccddddd";
    let mystr = "";
    let count = 1;
    let last = str[0];
function Compressed(string){
    for (let i = 1; i < str.length; i++) {
        if (str[i] == last) { // Находим повторяющийся символ
            count++;
        } else {                // Вставляем счетчик символа и обновляем последний символ
            mystr += last + "(" + count + ")";
            last = str[i];
            count = 1;          
        }
    }
    return mystr + last + "(" + count + ")";
} 
    console.log(Compressed(str));

Ответы (1 шт):

Автор решения: vsemozhebuty

Как вариант (пытался свести к минимуму количество вспомогательных переменных):

function Compressed(source){
  let compressed = '';
  let chunk = '';

  for (const char of source) {
    if (char === chunk[0]) {
      chunk += char;
    } else {
      compressed += chunk.length <= 4 ? chunk : `${chunk[0]}(${chunk.length})`;
      chunk = char;
    }
  }
  compressed += chunk.length <= 4 ? chunk : `${chunk[0]}(${chunk.length})`;

  return compressed;
}

console.log(Compressed('abbbbcccccdd'));

→ Ссылка