Реализуйте функцию RLD (run-length decoding), обратную RLE: раскройте сжатую строку, повторяя символ указанное число раз; одиночные символы оставляйте без изменений.

Для формата «символ, затем необязательное число повторений» считывайте символ и всю последовательность цифр после него; без числа используйте единицу.

Короткий ответ

Что ответить на собеседовании

Для формата «символ, затем необязательное число повторений» считывайте символ и всю последовательность цифр после него; без числа используйте единицу.

Подробный разбор

Ответ с пояснениями

Для формата «символ, затем необязательное число повторений» считывайте символ и всю последовательность цифр после него; без числа используйте единицу.

Примем, что исходные символы не являются цифрами, а число повторов положительно. Например, A3BC2 → AAABCC. У примера есть защитный предел длины результата в 1 000 000 UTF-16 единиц.

function rld(text) {
  const pattern = /([^0-9])([0-9]*)/uy;
  let result = '';
  while (pattern.lastIndex < text.length) {
    const match = pattern.exec(text);
    if (!match) throw new Error('Invalid RLD');
    const count = match[2] === '' ? 1 : Number(match[2]);
    if (!Number.isSafeInteger(count) || count < 1 ||
        result.length + match[1].length * count > 1000000) {
      throw new RangeError('Invalid count or result too large');
    }
    result += match[1].repeat(count);
  }
  return result;
}

Для кодирования самих цифр нужно дополнительно определить экранирование или разделитель; без такого договора формат неоднозначен.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее