Полиморфизм позволяет вызывать один и тот же метод у разных объектов и получать поведение, свойственное каждому. Здесь каждый канал по-своему считает стоимость сообщения.
Каждое сообщение имеет вид <channel> <text>, где текст — всё после первого пробела:
email: стоит 1.sms: стоит 5 за каждый начатый блок из 160 символов текста (от 1 до 160 символов — один блок).push: бесплатно.
Реализуйте notification_cost(messages).
Входные данные
messages: Сообщения для отправки. В тексте SMS есть хотя бы один символ.
Выходные данные
Верните общую стоимость.
Ограничения
0 ≤ число сообщений ≤ 10,000
Длина текстов от 1 до 2,000 символов
Примеры
Ввод:
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.
Ввод:
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. Следуйте условию и ограничениям выше.