Все задачи
Легко Решено: 0 Процент решений: 0%

Стоимость уведомлений

Отправьте сообщения через email, SMS и push, где каждый канал сам считает стоимость.

Чему вы научитесь

  • Давать каждому каналу своё правило стоимости
  • Округлять вверх до целых блоков символов
  • Делить сообщение на канал и текст

Условие

Полиморфизм позволяет вызывать один и тот же метод у разных объектов и получать поведение, свойственное каждому. Здесь каждый канал по-своему считает стоимость сообщения.

Каждое сообщение имеет вид <channel> <text>, где текст — всё после первого пробела:

  • email: стоит 1.
  • sms: стоит 5 за каждый начатый блок из 160 символов текста (от 1 до 160 символов — один блок).
  • push: бесплатно.

Реализуйте notification_cost(messages).

Входные данные

messages: Сообщения для отправки. В тексте SMS есть хотя бы один символ.

Выходные данные

Верните общую стоимость.

Ограничения

0 ≤ число сообщений ≤ 10,000

Длина текстов от 1 до 2,000 символов

Примеры

Пример 1
Ввод:
messages = ["email Welcome!", "sms Your code is 1234", "push New follower"]

Ожидаемый вывод:
expected = 6
Ввод:
std::vector<std::string> messages = {"email Welcome!", "sms Your code is 1234", "push New follower"};

Ожидаемый вывод:
long long expected = 6;
Ввод:
string[] messages = new string[] {"email Welcome!", "sms Your code is 1234", "push New follower"};

Ожидаемый вывод:
long expected = 6;

Пояснение

Email стоит 1, короткое SMS занимает один блок (5), push бесплатен: 6.

Пример 2
Ввод:
messages = ["sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]

Ожидаемый вывод:
expected = 10
Ввод:
std::vector<std::string> messages = {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};

Ожидаемый вывод:
long long expected = 10;
Ввод:
string[] messages = new string[] {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};

Ожидаемый вывод:
long expected = 10;

Пояснение

161 символу нужны два блока по 160 символов: 2 × 5 = 10.

Как подступиться

Сначала попробуйте сами, затем открывайте подсказки по одной.

Подсказка 1

Разделите каждое сообщение один раз по первому пробелу на канал и текст.

Подсказка 2

Для SMS считайте блоки делением с округлением вверх: (length + 159) / 160.

Подсказка 3

Push бесплатен и добавляет 0.

Ожидаемая сложность

время O(общая длина), доп. память O(1)

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.