Solución

@eltamales
·hace 2dTypeScript
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
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