Цикл задач для программистов
Предупреждения
Мелисса верстает предупреждения Минздрава на сайтах. Раньше это делали картинками, однако недавно текст предупреждения рекомендовали изменить. Чтобы в будущем было проще изменять текст на предупреждениях, Мелисса начала рефакторинг. Пока она занимается исправлением архитектуры и внешним видом предупреждения, подготовьте функцию, которая будет подбирать значение отступа между символами (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
- неправильно обрабатывать входные данные.