Saltar al contenido

Las balizas que faltan

Enunciado

Nicanor es balicero: pone las balizas que marcan el canal navegable del río, numeradas desde la 1 hacia río abajo. La lista de las que ya están puestas llega ordenada de menor a mayor y sin repetidos, pero con huecos: hay números que nunca se pusieron.

Nicanor va a pedir hierro para una sola, y te dice cuál quiere: la k-ésima que falta, contando los huecos de menor a mayor a partir del número 1.

Recibes la lista de balizas puestas y el número k, y regresas el número de esa baliza. Con 2, 3, 4, 7 y 11 puestas, los números que faltan son 1, 5, 6, 8, 9, 10, 12 y así, entonces la quinta que falta es la 9.

Los números no se acaban donde termina la lista, porque el río sigue: todo número mayor que la última baliza puesta también es un hueco y también cuenta. Con 1, 2 y 3 puestas no falta nada entre ellas, así que los huecos son 4, 5, 6 y así, y la segunda que falta es la 5. Si no hay ninguna baliza puesta, la k-ésima que falta es k.

k siempre es 1 o más. Hay tramos de río con hasta 60 balizas puestas. Idea: párate en un renglón cualquiera de la lista y saca la cuenta de lo que falta antes de él. Si ahí está la baliza 11 y es la quinta puesta, entonces entre el 1 y el 11 faltan 6 números. Esa cuenta nunca baja cuando avanzas por la lista, así que puedes partirla por mitades y buscar el primer renglón donde la cuenta ya llegó a k. Ese renglón te dice cuántas balizas puestas quedan antes de tu hueco, y de ahí sale el número: del 1 hasta tu hueco cada número es una puesta o un hueco, y ya sabes cuántos hay de cada uno.

Ejemplos

  • El ejemplo

    [2, 3, 4, 7, 11], 5 → 9

  • Sin huecos, la que sigue

    [1, 2, 3], 2 → 5

  • Ninguna baliza puesta

    [], 3 → 3

  • La primera libre es la 1

    [2], 1 → 1

  • Todo seguido desde el 1

    [1, 2, 3], 1 → 4

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

Empiezas con esto

Python

def baliza_libre(puestas, k):
    pass

JavaScript

function balizaLibre(puestas, k) {
}
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 →