Problem
Polymorphie erlaubt es, dieselbe Methode auf verschiedenen Objekten aufzurufen und jeweils ein eigenes Verhalten zu bekommen. Hier berechnet jeder Kanal die Kosten einer Nachricht auf seine Weise.
Jede Nachricht hat die Form <channel> <text>, wobei der Text alles nach dem ersten Leerzeichen ist:
email: kostet 1.sms: kostet 5 für jeden angefangenen Block von 160 Zeichen Text (1 bis 160 Zeichen sind ein Block).push: kostenlos.
Implementiere notification_cost(messages).
Eingabe
messages: Die zu sendenden Nachrichten. SMS-Texte haben mindestens ein Zeichen.
Ausgabe
Gib die Gesamtkosten zurück.
Einschränkungen
0 ≤ Anzahl der Nachrichten ≤ 10,000
Texte haben 1 bis 2,000 Zeichen
Beispiele
Eingabe:
messages = ["email Welcome!", "sms Your code is 1234", "push New follower"]
Erwartete Ausgabe:
expected = 6
Eingabe:
std::vector<std::string> messages = {"email Welcome!", "sms Your code is 1234", "push New follower"};
Erwartete Ausgabe:
long long expected = 6;
Eingabe:
string[] messages = new string[] {"email Welcome!", "sms Your code is 1234", "push New follower"};
Erwartete Ausgabe:
long expected = 6;
Erläuterung
E-Mail kostet 1, die kurze SMS braucht einen Block (5) und Push ist kostenlos: 6.
Eingabe:
messages = ["sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
Erwartete Ausgabe:
expected = 10
Eingabe:
std::vector<std::string> messages = {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};
Erwartete Ausgabe:
long long expected = 10;
Eingabe:
string[] messages = new string[] {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};
Erwartete Ausgabe:
long expected = 10;
Erläuterung
161 Zeichen brauchen zwei Blöcke à 160 Zeichen: 2 × 5 = 10.
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
Teile jede Nachricht einmal am ersten Leerzeichen in Kanal und Text.
Hinweis 2
Zähle bei SMS die Blöcke mit aufgerundeter Division: (length + 159) / 160.
Hinweis 3
Push-Nachrichten kosten nichts und addieren 0.
Erwartete Komplexität
Zeit O(Gesamtlänge), zusätzlicher Speicher O(1)
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.