Limite de Velocidad - FreeCodeCamp #127 Daily Challenge

2 min

Enunciado

Dada una velocidad en millas por hora (MPH) y un límite en kilómetros por hora (KPH):

  • Si tu velocidad (convertida a KPH) es menor o igual al límite, devuelve “Not Speeding”.
  • Si excedes el límite por hasta 5 KPH, devuelve “Warning”.
  • Si excedes el límite por más de 5 KPH, devuelve “Ticket”.

Dato útil: 11 milla = 1.609341.60934 kilómetros.


🔍 Análisis Inicial

Antes de programar, aclaremos el flujo de decisión:

flowchart TD
  A["Velocidad en MPH"] --> B["Convertir a KPH"]
  B --> C{"¿speedKPH ≤ límite?"}
  C -- Sí --> D["Not Speeding"]
  C -- No --> E{"¿≤ límite + 5?"}
  E -- Sí --> F["Warning"]
  E -- No --> G["Ticket"]

Casos de Prueba Clave

  • Caso 1: Velocidad dentro del límite
    • Entrada: speedMph = 30, speedLimitKph = 70
    • Salida Esperada: “Not Speeding”
  • Caso 2: Velocidad con advertencia
    • Entrada: speedMph = 40, speedLimitKph = 60
    • Salida Esperada: “Warning”
  • Caso 3: Velocidad justo en el límite de advertencia
    • Entrada: speedMph = 40, speedLimitKph = 65
    • Salida Esperada: “Not Speeding”
  • Caso 4: Velocidad con multa
    • Entrada: speedMph = 60, speedLimitKph = 90
    • Salida Esperada: “Ticket”
  • Caso 5: Velocidad con advertencia cerca del límite
    • Entrada: speedMph = 65, speedLimitKph = 100
    • Salida Esperada: “Warning”
  • Caso 6: Velocidad muy por encima del límite
    • Entrada: speedMph = 88, speedLimitKph = 40
    • Salida Esperada: “Ticket”

🛠️ Desarrollo de la Solución

Estrategia

  1. Convertir unidades: speedKPH=speedMph×1.60934speedKPH = speedMph \times 1.60934

  2. Comparar con el límite:

  • Si speedKPHspeedLimitKphspeedKPH \leq speedLimitKph → “Not Speeding”
  • Si speedKPHspeedLimitKph+5speedKPH \leq speedLimitKph + 5 → “Warning”
  • Si speedKPH>speedLimitKph+5speedKPH > speedLimitKph + 5 → “Ticket”

Implementación en JavaScript

function speedCheck(speedMph, speedLimitKph) {
  const speedKPH = speedMph * 1.60934
  if (speedKPH <= speedLimitKph)
    return 'Not Speeding'
  if (speedKPH <= speedLimitKph + 5)
    return 'Warning'
  return 'Ticket'
}

⚡ Análisis de Complejidad

  • Tiempo: O(1)O(1)
  • Espacio: O(1)O(1)

🧩 Casos Edge y Consideraciones

  • Si la velocidad es igual al límite → “Not Speeding”
  • Si es exactamente 5 KPH arriba → “Warning”
  • Velocidad negativa o cero → “Not Speeding” (no tiene sentido real, pero el código lo permite)
  • La precisión depende del factor de conversión (1.609341.60934)

💡 Reflexiones y Aprendizajes

¿Qué aprendimos?

  • Convertir unidades
  • Pensar en los edge cases

📚 Recursos y Referencias