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