Solución
solution.tsTypeScript
const DEFAULT = -1
const MIN_PASSENGER = 0
const MIN_DISTANCE = 100
const EC_RATE = 0.10
const EXTRA_EC_RATE = 30
const BS_RATE = 0.25
const FS_RATE = 0.45
const GRUPAL_DISCOUNT = 0.10
const MIN_PASSENGERS_DISCOUNT = 5
type ClassTravel = 'economy' | 'business' | 'first'
function getGrossTotalByClassTravel(classTravel: ClassTravel, distance: number, passanger: number, wallet: boolean){
switch(classTravel){
case 'economy':
let base = distance * EC_RATE * passanger
return wallet ? base += EXTRA_EC_RATE * passanger : base
case 'business': return distance * BS_RATE * passanger
default: return distance * FS_RATE * passanger
}
}
export function calculateFlightTicketPrice(passanger: number, classTravel: ClassTravel, distance: number, wallet: boolean): number {
// Verificar si los pasajeros son válidos
if (passanger <= MIN_PASSENGER) return DEFAULT;
// Verificar si la distancia mínima es válida
if (distance < MIN_DISTANCE) return DEFAULT;
// Obtenemos el total bruto
let grossTotal = getGrossTotalByClassTravel(classTravel, distance, passanger, wallet)
// Aplicar descuento grupal si hay 5 o más pasajeros
if (passanger >= MIN_PASSENGERS_DISCOUNT)grossTotal -= grossTotal * GRUPAL_DISCOUNT;
return +grossTotal.toFixed(1);
}0respuestas