Problema
Il polimorfismo permette di chiamare lo stesso metodo su oggetti diversi e ottenere un comportamento specifico per ciascuno. Qui ogni canale calcola il costo di un messaggio a modo suo.
Ogni messaggio è <channel> <text>, dove il testo è tutto ciò che segue il primo spazio:
email: costa 1.sms: costa 5 per ogni blocco iniziato di 160 caratteri di testo (da 1 a 160 caratteri è un blocco).push: gratis.
Implementa notification_cost(messages).
Input
messages: I messaggi da inviare. I testi SMS hanno almeno un carattere.
Output
Restituisci il costo totale.
Vincoli
0 ≤ numero di messaggi ≤ 10,000
I testi hanno da 1 a 2,000 caratteri
Esempi
Input:
messages = ["email Welcome!", "sms Your code is 1234", "push New follower"]
Output atteso:
expected = 6
Input:
std::vector<std::string> messages = {"email Welcome!", "sms Your code is 1234", "push New follower"};
Output atteso:
long long expected = 6;
Input:
string[] messages = new string[] {"email Welcome!", "sms Your code is 1234", "push New follower"};
Output atteso:
long expected = 6;
Spiegazione
L'email costa 1, l'SMS breve usa un blocco (5) e il push è gratis: 6.
Input:
messages = ["sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
Output atteso:
expected = 10
Input:
std::vector<std::string> messages = {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};
Output atteso:
long long expected = 10;
Input:
string[] messages = new string[] {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};
Output atteso:
long expected = 10;
Spiegazione
161 caratteri richiedono due blocchi da 160 caratteri: 2 × 5 = 10.
Come affrontarlo
Prova prima da solo, poi apri un suggerimento alla volta.
Suggerimento 1
Dividi ogni messaggio una volta al primo spazio per ottenere canale e testo.
Suggerimento 2
Per gli SMS conta i blocchi con la divisione arrotondata per eccesso: (length + 159) / 160.
Suggerimento 3
I messaggi push sono gratuiti e aggiungono 0.
Complessità attesa
tempo O(lunghezza totale), spazio aggiuntivo O(1)
Riferimenti
Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.