Retour aux défis
Facile 0 résolus 0 % de réussite

Coût des notifications

Envoyez des messages par e-mail, SMS et push, chaque canal calculant son propre coût.

Ce que vous allez apprendre

  • Donner à chaque canal sa propre règle de coût
  • Arrondir au bloc de caractères supérieur
  • Séparer un message en canal et texte

Problème

Le polymorphisme permet d'appeler la même méthode sur des objets différents et d'obtenir un comportement propre à chacun. Ici, chaque canal calcule le coût d'un message à sa manière.

Chaque message s'écrit <channel> <text>, où le texte est tout ce qui suit le premier espace :

  • email: coûte 1.
  • sms: coûte 5 par bloc commencé de 160 caractères de texte (1 à 160 caractères font un bloc).
  • push: gratuit.

Implémentez notification_cost(messages).

Entrée

messages: Les messages à envoyer. Les textes SMS ont au moins un caractère.

Sortie

Renvoyez le coût total.

Contraintes

0 ≤ nombre de messages ≤ 10,000

Les textes ont de 1 à 2,000 caractères

Exemples

Exemple 1
Entrée :
messages = ["email Welcome!", "sms Your code is 1234", "push New follower"]

Sortie attendue :
expected = 6
Entrée :
std::vector<std::string> messages = {"email Welcome!", "sms Your code is 1234", "push New follower"};

Sortie attendue :
long long expected = 6;
Entrée :
string[] messages = new string[] {"email Welcome!", "sms Your code is 1234", "push New follower"};

Sortie attendue :
long expected = 6;

Explication

L'e-mail coûte 1, le SMS court utilise un bloc (5) et le push est gratuit : 6.

Exemple 2
Entrée :
messages = ["sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]

Sortie attendue :
expected = 10
Entrée :
std::vector<std::string> messages = {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};

Sortie attendue :
long long expected = 10;
Entrée :
string[] messages = new string[] {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};

Sortie attendue :
long expected = 10;

Explication

161 caractères nécessitent deux blocs de 160 caractères : 2 × 5 = 10.

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

Coupez chaque message une fois au premier espace pour obtenir le canal et le texte.

Indice 2

Pour les SMS, comptez les blocs avec une division arrondie au-dessus : (length + 159) / 160.

Indice 3

Les messages push sont gratuits et ajoutent 0.

Complexité attendue

temps O(longueur totale), espace supplémentaire O(1)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.