Конструктор строки по позиционным индексам

Разместите каждый символ по указанным индексам. Для пропущенных позиций и конфликтов нужно определить политику: ниже пробел заполняет пропуск, разные символы на одном индексе вызывают ошибку.

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

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

Разместите каждый символ по указанным индексам. Для пропущенных позиций и конфликтов нужно определить политику: ниже пробел заполняет пропуск, разные символы на одном индексе вызывают ошибку.

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

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

Условие

Функция получает объект, где каждое свойство — это символ, а значение — массив позиций, на которых этот символ должен появиться в итоговой строке. Необходимо сформировать строку, разместив каждый символ на всех указанных в массиве позициях.

Пример входных данных:

{
  "a": [0, 2],
  "b": [1]
}

Ожидаемый результат: "aba".

Функция должна корректно обрабатывать любые наборы символов и индексов, гарантируя, что результирующая строка имеет длину, достаточную для размещения самого большого индекса плюс один.

Ответ

Разместите каждый символ по указанным индексам. Для пропущенных позиций и конфликтов нужно определить политику: ниже пробел заполняет пропуск, разные символы на одном индексе вызывают ошибку.

function buildString(mapping) {
  const slots = new Map();
  let max = -1;
  for (const [char, positions] of Object.entries(mapping)) {
    if ([...char].length !== 1) throw new TypeError('Ключ должен быть символом');
    for (const index of positions) {
      if (!Number.isSafeInteger(index) || index < 0) throw new RangeError('Неверный индекс');
      if (slots.has(index) && slots.get(index) !== char) throw new Error('Конфликт позиции');
      slots.set(index, char); max = Math.max(max, index);
    }
  }
  return Array.from({ length: max + 1 }, (_, index) => slots.get(index) ?? ' ').join('');
}

Для примера результат aba. Индексы относятся к кодовым точкам, поэтому UTF-16 length строки с эмодзи может быть больше числа позиций. Практический API должен ограничить максимальный индекс по памяти; обещать работу с произвольно огромным разреженным индексом нельзя.

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

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

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

Подробнее