Solución
solution.tsTypeScript
export function calculateElectricityBill(k: number, t: string): number {
const clientType = t;
const kiloWatts = k;
const RESIDENTIAL_CLIENT_TYPE = 'residential';
const COMMERCIAL_CLIENT_TYPE = 'commercial';
const INDUSTRIAL_CLIENT_TYPE = 'industrial';
const RESIDENTIAL_LOW_RATE = 0.10;
const RESIDENTIAL_MEDIUM_RATE = 0.15;
const RESIDENTIAL_HIGH_RATE = 0.20;
const COMMERCIAL_RATE = 0.18;
const COMMERCIAL_HIGH_CONSUMPTION_DISCOUNT = 0.90;
const INDUSTRIAL_RATE = 0.12;
const INDUSTRIAL_HIGH_CONSUMPTION_DISCOUNT = 0.85;
const INDUSTRIAL_FIXED_CHARGE = 50;
const MINIMUM_BILL_AMOUNT = 5;
let consumption = 0;
// Calcular costo según el tipo de cliente
if (clientType === RESIDENTIAL_CLIENT_TYPE) {
// Aplicar tarifa por tramos según consumo
if (kiloWatts <= 100) {
consumption = kiloWatts * RESIDENTIAL_LOW_RATE;
} else if (kiloWatts <= 300) {
consumption =
100 * RESIDENTIAL_LOW_RATE +
(kiloWatts - 100) * RESIDENTIAL_MEDIUM_RATE;
} else {
consumption =
100 * RESIDENTIAL_LOW_RATE +
200 * RESIDENTIAL_MEDIUM_RATE +
(kiloWatts - 300) * RESIDENTIAL_HIGH_RATE;
}
} else if (clientType === COMMERCIAL_CLIENT_TYPE) {
// Aplicar tarifa plana con posible descuento por alto consumo
if (kiloWatts > 500) {
consumption =
kiloWatts *
COMMERCIAL_RATE *
COMMERCIAL_HIGH_CONSUMPTION_DISCOUNT;
} else {
consumption = kiloWatts * COMMERCIAL_RATE;
}
} else if (clientType === INDUSTRIAL_CLIENT_TYPE) {
// Aplicar tarifa plana con posible descuento y cargo fijo
if (kiloWatts > 1000) {
consumption =
kiloWatts *
INDUSTRIAL_RATE *
INDUSTRIAL_HIGH_CONSUMPTION_DISCOUNT +
INDUSTRIAL_FIXED_CHARGE;
} else {
consumption =
kiloWatts * INDUSTRIAL_RATE +
INDUSTRIAL_FIXED_CHARGE;
}
}
// Aplicar cobro mínimo si el costo calculado es menor al permitido
if (isMinAmount(consumption)) {
consumption = MINIMUM_BILL_AMOUNT;
}
return +consumption.toFixed(2);
}
function isMinAmount(consumption: number): boolean {
return consumption < 5;
}0respuestas