Retour aux défis
Facile 0 résolus 0 % de réussite

Décorateurs de prix

Enveloppez un prix de base dans des décorateurs de remise, de taxe, d’expédition et de coupon appliqués dans l’ordre.

Ce que vous allez apprendre

  • Empiler des comportements en couches autour d'une valeur
  • Appliquer les pourcentages dans le bon ordre
  • Empêcher une valeur de passer sous zéro

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

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

Exemple 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.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.