Solución
solution.tsTypeScript
const VALOR_ERROR = -1;
const REDONDEO = 100;
const PASAJEROS_MINIMOS = 1;
const DISTANCIA_MINIMA = 100;
const MAX_GRUPO = 5;
const DESCUENTO_GRUPAL = 0.90;
const TARIFA_EQUIPAJE = 30;
const ECONOMY_RATE = 0.10;
const BUSINESS_RATE = 0.25;
const FIRST_RATE = 0.45;
const TARIFAS: Record<string, number> = {
economy: ECONOMY_RATE,
business: BUSINESS_RATE,
first: FIRST_RATE,
};
export function calculateFlightTicketPrice(pasajeros: number, claseVuelo: string, distancia: number, tieneEquipaje: boolean): number {
// Verificar si los pasajeros son válidos
if (pasajeros < PASAJEROS_MINIMOS) return VALOR_ERROR;
// Verificar si la distancia mínima es válida
if (distancia < DISTANCIA_MINIMA) return VALOR_ERROR;
// Calcular precio base y equipaje según la clase de vuelo
let total = baseCost(pasajeros, claseVuelo, distancia) + luggageCost(pasajeros, claseVuelo, tieneEquipaje);
// Aplicar descuento grupal si hay cinco o más pasajeros
total = applyGroupDiscount(total, pasajeros);
return Math.round(total * REDONDEO) / REDONDEO;
}
// Calcula el precio base
function baseCost(pasajeros: number, claseVuelo: string, distancia: number): number {
return distancia * TARIFAS[claseVuelo] * pasajeros;
}
// Aplicar cargo de equipaje si el pasajero lleva
function luggageCost(pasajeros: number, claseVuelo: string, tieneEquipaje: boolean): number {
if(claseVuelo === "economy" && tieneEquipaje) return TARIFA_EQUIPAJE * pasajeros;
return 0;
}
// Aplicar descuento grupal
function applyGroupDiscount(total: number, pasajeros: number):number {
if(pasajeros >= MAX_GRUPO) return total * (DESCUENTO_GRUPAL);
return total;
}0respuestas