Solución

@aventuradev·hace 5dTypeScript
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
Respuestas

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.