Saltar al contenido

La parada más cercana

Enunciado

Ifigenia da clases de buceo y lleva pegada al traje la tabla de paradas: las profundidades en metros donde hay que detenerse a esperar, ordenadas de la menos honda a la más honda. Al subir mira el reloj, que marca cualquier profundidad, y tiene que decidir a qué parada de la tabla se acerca más. Escribe una función que reciba la tabla ordenada de menor a mayor y la medida del reloj, y regrese la profundidad de la parada más cercana. No la posición: la profundidad. Con la tabla 3, 6, 9, 12 y 21 y una medida de 10 regresas 9, porque del 10 al 9 hay un metro y del 10 al 12 hay dos.

Si la medida queda a la misma distancia de dos paradas, gana la menos honda: con la tabla 4 y 8 y una medida de 6 regresas 4.

Si la medida cae justo en una parada, la más cercana es esa misma: con la tabla 3, 6, 9, 12 y 21 y una medida de 12 regresas 12.

Si la medida se queda por debajo de la primera parada, regresas la primera, y si se pasa de la última, regresas la última: con esa misma tabla, una medida de 1 regresa 3 y una de 40 regresa 21.

Si la tabla viene vacía, regresas -1.

No se vale usar min ni Math.min, ni volver a ordenar la tabla: el chiste del reto es no recorrerla entera.

Idea: busca por mitades el lugar donde cabría la medida. Cuando lo tienes, la parada más cercana solo puede ser una de las dos que quedan a los lados de ese corte, así que con comparar esas dos alcanza.

Ejemplos

  • La medida del reloj

    [3, 6, 9, 12, 21], 10 → 9

  • Más cerca de la siguiente

    [3, 6, 9, 12, 21], 11 → 12

  • Empate, gana la menos honda

    [4, 8], 6 → 4

  • Justo en una parada

    [3, 6, 9, 12, 21], 12 → 12

  • Menos honda que todas

    [3, 6, 9, 12, 21], 1 → 3

  • Más honda que todas

    [3, 6, 9, 12, 21], 40 → 21

Además de estas, el reto tiene pruebas ocultas que se revelan al enviar tu solución.

Empiezas con esto

Python

def mas_cercana(tabla, medida):
    pass

JavaScript

function masCercana(tabla, medida) {
}
Resolver este reto

Se abre en el navegador, con el editor y las pruebas. Es gratis y no hace falta cuenta para empezar.

Más retos de O(log n)

Ver todos los retos →