|Refactoriza: precio de boleto de aviónMaster
Ejercicio00:00

¿Quieres un reto mayor?

Resuelve en 20:00

info

Importante: Para que se registre el resultado tienes que iniciar sesión.

Refactoriza: precio de boleto de avión

Master400 pts·Refactorización
ruleRestricciones de Refactoring
  • radio_button_unchecked
    Sin números mágicos
  • radio_button_unchecked
    Sin variables de una sola letra
  • radio_button_unchecked
    Declara constantes en UPPER_SNAKE_CASE
  • radio_button_unchecked
    Extrae al menos una función auxiliar
  • radio_button_unchecked
    Elimina la cadena if-else para tipos de clase
  • radio_button_unchecked
    Máximo 40 líneas en la función principal

Enunciado

Contexto

Tienes una función que calcula el precio final de un boleto de avión según la clase, la distancia, la cantidad de pasajeros y si llevan equipaje. El código funciona, pero está lleno de problemas: números mágicos, variables de una sola letra, lógica duplicada y todo mezclado en una sola función gigante.

Tu tarea es refactorizarla aplicando el patrón Strategy (o polimorfismo), extrayendo constantes con nombres descriptivos y separando las responsabilidades en funciones auxiliares.

Reglas de negocio

  • Si passengers <= 0 o distance < 100, retorna -1
  • Precio base por kilómetro según la clase:
    • "economy"0.10 por km por pasajero
    • "business"0.25 por km por pasajero
    • "first"0.45 por km por pasajero
  • Equipaje (hasLuggage = true):
    • "economy" cobra 30 por pasajero
    • "business" y "first" incluyen el equipaje (sin cargo adicional)
  • Si hay 5 o más pasajeros, aplica un 10% de descuento sobre el total

Firma de la función

function calculateFlightTicketPrice(
  passengers: number,
  flightClass: string,
  distance: number,
  hasLuggage: boolean
): number

Ejemplos

// 2 pasajeros, economy, 500 km, sin equipaje
calculateFlightTicketPrice(2, "economy", 500, false) // → 100

// 2 pasajeros, economy, 500 km, con equipaje
calculateFlightTicketPrice(2, "economy", 500, true)  // → 160

// 1 pasajero, business, 800 km, sin equipaje
calculateFlightTicketPrice(1, "business", 800, false) // → 200

// 5 pasajeros, economy, 400 km, sin equipaje (descuento grupal)
calculateFlightTicketPrice(5, "economy", 400, false)  // → 180
Restriccionesexpand_more
  • Dificultad: Master
  • Completa todos los test cases para obtener los 400 puntos.
  • No modificar la línea export al final del archivo.
  • Se recomienda evitar el uso de inteligencia artificial para que realmente tú practiques los ejercicios.

Puedes usar console.log() para depurar. Los resultados aparecen en la Consola de salida, no en el navegador.

Inicia sesión para reaccionar
Inicia sesión para reaccionar
6 soluciones · 100% aceptación