Todos los desafíos
Fácil 0 resueltos 0% de aceptación

Decoradores de precio

Envuelve un precio base en decoradores de descuento, impuestos, envío y cupón aplicados en orden.

Lo que aprenderás

  • Apilar comportamientos en capas alrededor de un valor
  • Aplicar porcentajes en el orden correcto
  • Impedir que un valor baje de cero

Problema

Ver original (inglés)

El patrón decorator añade comportamiento envolviendo un objeto en capas. Cada capa aquí cambia el precio de la capa interior.

Parte de base_price y aplica los decoradores en orden:

  • discount p: reduce el precio en p por ciento.
  • tax p: aumenta el precio en p por ciento.
  • shipping a: añade una cantidad fija a.
  • coupon a: resta a, pero nunca baja de 0.

Implementa price_decorators(base_price, decorators).

Entrada

base_price: El precio inicial.

decorators: Las capas, en el orden en que envuelven el precio. Las cantidades pueden tener decimales.

Salida

Devuelve el precio final. Se aceptan respuestas dentro de 1e-6.

Restricciones

0 ≤ base_price ≤ 1,000,000

0 ≤ número de decoradores ≤ 100; 0 ≤ p ≤ 100, 0 ≤ a ≤ 100,000

Ejemplos

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

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

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

Salida esperada:
double expected = 102.2;

Explicación

100 − 10% = 90, más 8% de impuesto = 97.2, más 5 de envío = 102.2.

Ejemplo 2
Entrada:
base_price = 20
decorators = ["coupon 25", "shipping 4"]

Salida esperada:
expected = 4.0
Entrada:
long long base_price = 20;
std::vector<std::string> decorators = {"coupon 25", "shipping 4"};

Salida esperada:
double expected = 4.0;
Entrada:
long base_price = 20;
string[] decorators = new string[] {"coupon 25", "shipping 4"};

Salida esperada:
double expected = 4.0;

Explicación

El cupón dejaría el precio por debajo de cero, así que se queda en 0; luego el envío lo deja en 4.

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

Aplica las capas exactamente en el orden dado.

Pista 2

Los porcentajes se calculan sobre el precio actual, no sobre el precio base.

Pista 3

Un cupón nunca puede dejar el precio por debajo de 0.

Complejidad esperada

tiempo O(número de decoradores), espacio extra O(1)

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.