Torna alle sfide
Facile 0 risolte 0% di accettazione

Decorator del prezzo

Avvolgi un prezzo base in decoratori di sconto, tassa, spedizione e coupon applicati in ordine.

Cosa imparerai

  • Impilare comportamenti a strati attorno a un valore
  • Applicare le percentuali nell'ordine giusto
  • Impedire a un valore di scendere sotto zero

Problema

Il pattern decorator aggiunge comportamento avvolgendo un oggetto in livelli. Ogni livello qui modifica il prezzo del livello interno.

Parti da base_price e applica i decorator in ordine:

  • discount p: riduce il prezzo di p percento.
  • tax p: aumenta il prezzo di p percento.
  • shipping a: aggiunge un importo fisso a.
  • coupon a: sottrae a, ma senza mai scendere sotto 0.

Implementa price_decorators(base_price, decorators).

Input

base_price: Il prezzo iniziale.

decorators: I livelli, nell’ordine in cui avvolgono il prezzo. Gli importi possono avere decimali.

Output

Restituisci il prezzo finale. Sono accettati risultati entro 1e-6.

Vincoli

0 ≤ base_price ≤ 1,000,000

0 ≤ numero di decoratori ≤ 100; 0 ≤ p ≤ 100, 0 ≤ a ≤ 100,000

Esempi

Esempio 1
Input:
base_price = 100
decorators = ["discount 10", "tax 8", "shipping 5"]

Output atteso:
expected = 102.2
Input:
long long base_price = 100;
std::vector<std::string> decorators = {"discount 10", "tax 8", "shipping 5"};

Output atteso:
double expected = 102.2;
Input:
long base_price = 100;
string[] decorators = new string[] {"discount 10", "tax 8", "shipping 5"};

Output atteso:
double expected = 102.2;

Spiegazione

100 − 10% = 90, più 8% di tasse = 97.2, più 5 di spedizione = 102.2.

Esempio 2
Input:
base_price = 20
decorators = ["coupon 25", "shipping 4"]

Output atteso:
expected = 4.0
Input:
long long base_price = 20;
std::vector<std::string> decorators = {"coupon 25", "shipping 4"};

Output atteso:
double expected = 4.0;
Input:
long base_price = 20;
string[] decorators = new string[] {"coupon 25", "shipping 4"};

Output atteso:
double expected = 4.0;

Spiegazione

Il coupon porterebbe il prezzo sotto zero, quindi si ferma a 0; poi la spedizione lo porta a 4.

Come affrontarlo

Prova prima da solo, poi apri un suggerimento alla volta.

Suggerimento 1

Applica gli strati esattamente nell'ordine dato.

Suggerimento 2

Le percentuali si calcolano sul prezzo attuale, non sul prezzo base.

Suggerimento 3

Un coupon non può mai portare il prezzo sotto 0.

Complessità attesa

tempo O(numero di decoratori), spazio aggiuntivo O(1)

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.