Solución

@abrahamjlr
·hace 2dTypeScript
solution.tsTypeScript
RESIDENTIAL_LOW_THRESHOLD = 100
RESIDENTIAL_MEDIUM_THRESHOLD = 300
RESIDENTIAL_LOW_RATE = 0.10
RESIDENTIAL_MEDIUM_RATE = 0.15
RESIDENTIAL_HIGH_RATE = 0.20

COMMERCIAL_RATE = 0.18
COMMERCIAL_DISCOUNT_THRESHOLD = 500
COMMERCIAL_DISCOUNT = 0.10

INDUSTRIAL_RATE = 0.12
INDUSTRIAL_DISCOUNT_THRESHOLD = 1000
INDUSTRIAL_DISCOUNT = 0.15
INDUSTRIAL_FIXED_FEE = 50

MINIMUM_BILL_AMOUNT = 5


def  calculate_residential_cost(kwh : int) -> float:
    if kwh <= RESIDENTIAL_LOW_THRESHOLD:
        return kwh * RESIDENTIAL_LOW_RATE

    cost = RESIDENTIAL_LOW_THRESHOLD *  RESIDENTIAL_LOW_RATE

    if kwh <= RESIDENTIAL_MEDIUM_THRESHOLD:
        cost += (kwh - RESIDENTIAL_LOW_THRESHOLD) * RESIDENTIAL_MEDIUM_RATE
    else:
        cost += (RESIDENTIAL_MEDIUM_THRESHOLD - RESIDENTIAL_LOW_THRESHOLD) * RESIDENTIAL_MEDIUM_RATE
        cost += (kwh - RESIDENTIAL_MEDIUM_THRESHOLD) * RESIDENTIAL_HIGH_RATE

    return cost

def calculate_commercial_cost(kwh : int) -> float:
    cost = kwh * COMMERCIAL_RATE
    if kwh > COMMERCIAL_DISCOUNT_THRESHOLD:
        cost *= (1 - COMMERCIAL_DISCOUNT)
    return cost

def calculate_industrial_cost(kwh : int) -> float:
    cost = kwh * INDUSTRIAL_RATE
    if kwh > INDUSTRIAL_DISCOUNT_THRESHOLD:
        cost *= (1 - INDUSTRIAL_DISCOUNT)
    return cost + INDUSTRIAL_FIXED_FEE


def calculate_electricity_bill(kwh: int, client_type: str) -> float:
    bill = 0
    
    if client_type == "residential":
        bill = calculate_residential_cost(kwh)
    elif client_type == "commercial":
        bill = calculate_commercial_cost(kwh)
    elif client_type == "industrial":
        bill = calculate_industrial_cost(kwh)
    
    if bill < MINIMUM_BILL_AMOUNT:
        return float(MINIMUM_BILL_AMOUNT)
    
    return round(float(bill),2)

exports = calculate_electricity_bill
0respuestas
Respuestas
0

Aún no hay respuestas

¡Sé el primero en responder!

Escribir un comentario

Recuerda ser amable. Estás comentando la solución de otra persona. Comparte tu perspectiva de forma constructiva y respetuosa.

Debes iniciar sesión para publicar un comentario.
Markdown