Войти Регистрация
Фронтенд

60. «1 товар, 3 товара, 11 товаров» в корзине Ozon

Лёгкая

В корзине Ozon пишут «В корзине 3 товара», в выдаче — «Найдено 1 421 товар», в отзывах — «21 отзыв». Если склонять по правилу «1 — товар, остальное — товаров», получается «22 товаров».

Напишите plural(n, forms). forms — три формы: ["товар", "товара", "товаров"] (для 1, для 2–4, для 5–20). Верните строку "<n> <форма>".

Правило для целых: последняя цифра 1 — первая форма, кроме чисел на 11; последняя цифра 2–4 — вторая, кроме 12–14; остальное — третья. Для отрицательных правило берётся по модулю, знак в числе остаётся.

Для дробных всегда вторая форма («1,5 килограмма»), а точка в числе заменяется запятой. Разделители тысяч не нужны.

В работе: Счётчик корзины и выдачи: 1, 2, 5, 11, 21, 111 и 1,5 кг — шесть разных случаев на одном экране.

Пример 1: один

Аргументы теста
1, ["товар", "товара", "товаров"]
Ожидается
"1 товар"

Пример 2: три

Аргументы теста
3, ["товар", "товара", "товаров"]
Ожидается
"3 товара"
Как проверяем Объявите plural — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 13: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function plural(n, forms) // → string
строкисклонениеIntl.PluralRules

Источник: на задачах Ozon: корзина и выдача. Условие пересказано своими словами.