Volver a los desafíos
Fácil 0 resueltos 0% de aceptación

Coste de las notificaciones

Envía mensajes por email, SMS y push, donde cada canal calcula su propio coste.

Lo que aprenderás

  • Dar a cada canal su propia regla de coste
  • Redondear hacia arriba a bloques de caracteres
  • Separar un mensaje en canal y texto

Problema

Ver original (inglés)

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

Ejemplo 1
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.

Ejemplo 2
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.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.