Problema
El polimorfismo permite llamar al mismo método en objetos distintos y obtener un comportamiento propio de cada uno. Aquí cada canal calcula el coste de un mensaje a su manera.
Cada mensaje es <channel> <text>, donde el texto es todo lo que va después del primer espacio:
email: cuesta 1.sms: cuesta 5 por cada bloque empezado de 160 caracteres de texto (de 1 a 160 caracteres es un bloque).push: gratis.
Implementa notification_cost(messages).
Entrada
messages: Los mensajes que se envían. Los textos de SMS tienen al menos un carácter.
Salida
Devuelve el coste total.
Restricciones
0 ≤ número de mensajes ≤ 10,000
Los textos tienen de 1 a 2,000 caracteres
Ejemplos
Entrada:
messages = ["email Welcome!", "sms Your code is 1234", "push New follower"]
Salida esperada:
expected = 6
Entrada:
std::vector<std::string> messages = {"email Welcome!", "sms Your code is 1234", "push New follower"};
Salida esperada:
long long expected = 6;
Entrada:
string[] messages = new string[] {"email Welcome!", "sms Your code is 1234", "push New follower"};
Salida esperada:
long expected = 6;
Explicación
El email cuesta 1, el SMS corto usa un bloque (5) y el push es gratis: 6.
Entrada:
messages = ["sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
Salida esperada:
expected = 10
Entrada:
std::vector<std::string> messages = {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};
Salida esperada:
long long expected = 10;
Entrada:
string[] messages = new string[] {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};
Salida esperada:
long expected = 10;
Explicación
161 caracteres necesitan dos bloques de 160 caracteres: 2 × 5 = 10.
Cómo abordarlo
Inténtalo primero por tu cuenta y luego abre las pistas una a una.
Pista 1
Divide cada mensaje una vez en el primer espacio para obtener canal y texto.
Pista 2
Para SMS, cuenta los bloques con división redondeada hacia arriba: (length + 159) / 160.
Pista 3
Los mensajes push son gratis y suman 0.
Complejidad esperada
tiempo O(longitud total), espacio extra O(1)
Referencias
Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.