Torna alle sfide
Facile 0 risolte 0% di accettazione

Costo delle notifiche

Invia messaggi via email, SMS e push, dove ogni canale calcola il proprio costo.

Cosa imparerai

  • Dare a ogni canale la propria regola di costo
  • Arrotondare per eccesso a blocchi di caratteri
  • Separare un messaggio in canale e testo

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

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

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

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.