Alle Herausforderungen
Einfach 0 gelöst 0% Erfolgsquote

Benachrichtigungskosten

Sende Nachrichten über E-Mail, SMS und Push, wobei jeder Kanal seine Kosten selbst berechnet.

Das lernst du

  • Jedem Kanal eine eigene Kostenregel geben
  • Auf ganze Zeichenblöcke aufrunden
  • Eine Nachricht in Kanal und Text teilen

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

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

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

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.