Найти тему
Николай Сталин

Яндекс Блиц Фронт 2: квалификация #4

Оглавление

Цикл задач для программистов

Предупреждения

Мелисса верстает предупреждения Минздрава на сайтах. Раньше это делали картинками, однако недавно текст предупреждения рекомендовали изменить. Чтобы в будущем было проще изменять текст на предупреждениях, Мелисса начала рефакторинг. Пока она занимается исправлением архитектуры и внешним видом предупреждения, подготовьте функцию, которая будет подбирать значение отступа между символами (letter-spacing) таким образом, чтобы переданный текст занимал отведённый контейнер целиком, не вылезая за границы, а значение letter-spacing было максимально возможным. Если же это не удаётся сделать, то решение должно возвращать null. Максимальная длина строки на вход - 100 символов. Ещё, входная строка не может быть пустой.

Ваше решение должно содержать код функции целиком и не использовать внешних зависимостей, чтобы Мелисса не рефакторила код ещё раз для интеграции решения.

Мы будем проверять, насколько оптимально работает ваше решение, и штрафовать его, если оно производит слишком большое количество манипуляций с DOM.

Заготовка функции

Мелисса приготовила сигнатуру функции, под которую она рефакторит код. Ваше решение должно содержать функцию, которая ей соответствует:

/*** 
 * @param container {Node} ссылка на DOM-node контейнера 
 * @param str {string} строка с текстом предупреждения 
 * @param min {number} минимальное значение letter-spacing (целое число) 
 * @param max {number} максимальное значение letter-spacing (целое число) 
 * @return {number} значение letter-spacing (целое число, px) или null, если поместить предупреждение не удаётся 
 */ 
function getLetterSpacing (container, str, min, max) { 
  // ваш код 
}

Примеры

Для такого контейнера:

<div id="container" style="width: 800px;height: 20px;font-size: 12px;"></div>

и таких входных параметров

getLetterSpacing( 
    document.getElementById(’container’), 
    ’ПРОГРАММИРОВАНИЕ НА JS МОЖЕТ БЫТЬ ОПАСНО ДЛЯ ЗДОРОВЬЯ’, 
    5, 
    20 
);

функция должна вернуть 7 (на вашем компьютере это число может быть другим из-за различий в отрисовке шрифтов).

Ваше решение будет тестироваться в браузере Google Chrome 69.

Если ваше решение проходит не все тесты, то оно может

  • возвращать неправильный ответ в каких-то случаях
  • выполнять слишком много манипуляций с DOM
  • неправильно обрабатывать входные данные.