Problème
Le patron decorator ajoute du comportement en enveloppant un objet dans des couches. Ici, chaque couche modifie le prix de la couche interne.
Partez de base_price et appliquez les décorateurs dans l’ordre :
discount p: réduit le prix de p pour cent.tax p: augmente le prix de p pour cent.shipping a: ajoute un montant fixe a.coupon a: soustrait a, mais sans jamais descendre sous 0.
Implémentez price_decorators(base_price, decorators).
Entrée
base_price: Le prix de départ.
decorators: Les couches, dans l’ordre où elles enveloppent le prix. Les montants peuvent avoir des décimales.
Sortie
Retournez le prix final. Les réponses à 1e-6 près sont acceptées.
Contraintes
0 ≤ base_price ≤ 1,000,000
0 ≤ nombre de décorateurs ≤ 100 ; 0 ≤ p ≤ 100, 0 ≤ a ≤ 100,000
Exemples
Entrée :
base_price = 100
decorators = ["discount 10", "tax 8", "shipping 5"]
Sortie attendue :
expected = 102.2
Entrée :
long long base_price = 100;
std::vector<std::string> decorators = {"discount 10", "tax 8", "shipping 5"};
Sortie attendue :
double expected = 102.2;
Entrée :
long base_price = 100;
string[] decorators = new string[] {"discount 10", "tax 8", "shipping 5"};
Sortie attendue :
double expected = 102.2;
Explication
100 − 10 % = 90, plus 8 % de taxe = 97.2, plus 5 de livraison = 102.2.
Entrée :
base_price = 20
decorators = ["coupon 25", "shipping 4"]
Sortie attendue :
expected = 4.0
Entrée :
long long base_price = 20;
std::vector<std::string> decorators = {"coupon 25", "shipping 4"};
Sortie attendue :
double expected = 4.0;
Entrée :
long base_price = 20;
string[] decorators = new string[] {"coupon 25", "shipping 4"};
Sortie attendue :
double expected = 4.0;
Explication
Le coupon ferait passer le prix en dessous de zéro, donc il s’arrête à 0 ; shipping l’amène ensuite à 4.
Comment l'aborder
Essayez d'abord seul, puis ouvrez les indices un par un.
Indice 1
Appliquez les couches exactement dans l'ordre donné.
Indice 2
Les pourcentages portent sur le prix actuel, pas sur le prix de base.
Indice 3
Un coupon ne peut jamais faire passer le prix sous 0.
Complexité attendue
temps O(nombre de décorateurs), espace supplémentaire O(1)
Références
Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.