Problem
Das decorator-Muster erweitert Verhalten, indem es ein Objekt in Schichten einhüllt. Jede Schicht hier verändert den Preis der darin enthaltenen Schicht.
Starte mit base_price und wende die Dekoratoren in Reihenfolge an:
discount p: reduziere den Preis um p Prozent.tax p: erhöhe den Preis um p Prozent.shipping a: addiere einen festen Betrag a.coupon a: ziehe a ab, aber gehe niemals unter 0.
Implementiere price_decorators(base_price, decorators).
Eingabe
base_price: Der Startpreis.
decorators: Die Schichten, in der Reihenfolge, in der sie den Preis umhüllen. Beträge dürfen Dezimalstellen haben.
Ausgabe
Gib den endgültigen Preis zurück. Antworten innerhalb von 1e-6 werden akzeptiert.
Einschränkungen
0 ≤ base_price ≤ 1,000,000
0 ≤ Anzahl der Decorator ≤ 100; 0 ≤ p ≤ 100, 0 ≤ a ≤ 100,000
Beispiele
Eingabe:
base_price = 100
decorators = ["discount 10", "tax 8", "shipping 5"]
Erwartete Ausgabe:
expected = 102.2
Eingabe:
long long base_price = 100;
std::vector<std::string> decorators = {"discount 10", "tax 8", "shipping 5"};
Erwartete Ausgabe:
double expected = 102.2;
Eingabe:
long base_price = 100;
string[] decorators = new string[] {"discount 10", "tax 8", "shipping 5"};
Erwartete Ausgabe:
double expected = 102.2;
Erläuterung
100 − 10% = 90, plus 8% Steuer = 97.2, plus 5 Versand = 102.2.
Eingabe:
base_price = 20
decorators = ["coupon 25", "shipping 4"]
Erwartete Ausgabe:
expected = 4.0
Eingabe:
long long base_price = 20;
std::vector<std::string> decorators = {"coupon 25", "shipping 4"};
Erwartete Ausgabe:
double expected = 4.0;
Eingabe:
long base_price = 20;
string[] decorators = new string[] {"coupon 25", "shipping 4"};
Erwartete Ausgabe:
double expected = 4.0;
Erläuterung
Der Gutschein würde den Preis unter null senken, also bleibt er bei 0; Versand macht daraus 4.
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
Wende die Schichten genau in der gegebenen Reihenfolge an.
Hinweis 2
Prozente beziehen sich auf den aktuellen Preis, nicht auf den Grundpreis.
Hinweis 3
Ein Gutschein kann den Preis nie unter 0 drücken.
Erwartete Komplexität
Zeit O(Anzahl der Decorator), zusätzlicher Speicher O(1)
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.