Solución
solution.tsTypeScript
const NONE_PASSANGERS = 0;
const MIN_DISTANCE = 100;
const INVALID = -1;
const PERCENTAGE_VALUE = 100;
const MIN_PASSANGERS_FOR_DISCOUNT = 5;
const OVER_MIN_PASSANGERS_DISCOUNT = .1;
export function calculateFlightTicketPrice(p: number, c: string, d: number, l: boolean): number {
const PASSANGERS = p;
const DISTANCE = d;
const TRAVEL_CLASS = c;
const LUGGAGE = l;
// Verificar si los pasajeros son válidos
if (PASSANGERS <= NONE_PASSANGERS) return INVALID;
// Verificar si la distancia mínima es válida
if (DISTANCE < MIN_DISTANCE) return INVALID;
const INITIAL_TOTAL_VALUE = 0;
let totalValue = classDiscount(INITIAL_TOTAL_VALUE, DISTANCE, PASSANGERS, LUGGAGE, TRAVEL_CLASS)
// Aplicar descuento grupal si hay 5 o más pasajeros
if (PASSANGERS >= MIN_PASSANGERS_FOR_DISCOUNT) {
totalValue = totalValue - totalValue * OVER_MIN_PASSANGERS_DISCOUNT;
}
return Math.round(totalValue * PERCENTAGE_VALUE) / PERCENTAGE_VALUE;
}
function classDiscount(
totalValue: number,
distance: number,
passangers: number,
luggage: boolean,
travelClass: string
){
const ECONOMY_CLASS = 'economy';
const ECONOMY_CLASS_DISCOUNT = .1;
const ECONOMY_LUGGAGE_CHARGE = 30;
const BUSINESS_CLASS = 'business';
const BUSINESS_CLASS_DISCOUNT = .25;
const FIRST_CLASS = 'first';
const FIRST_CLASS_DISCOUNT = .45
// Calcular precio base y equipaje según la clase de vuelo
if (travelClass === ECONOMY_CLASS) {
totalValue = distance * ECONOMY_CLASS_DISCOUNT * passangers;
// Aplicar cargo de equipaje si el pasajero lo lleva
if (luggage) {
totalValue = totalValue + ECONOMY_LUGGAGE_CHARGE * passangers;
}
} else if (travelClass === BUSINESS_CLASS) {
totalValue = distance * BUSINESS_CLASS_DISCOUNT * passangers;
// Business incluye equipaje, no hay cargo adicional
} else if (travelClass === FIRST_CLASS) {
totalValue = distance * FIRST_CLASS_DISCOUNT * passangers;
// Primera clase incluye equipaje, no hay cargo adicional
}
return totalValue;
}0respuestas