Saltar al contenido

Las colmenas separadas

Enunciado

Nicasio desbrozó varios claros a lo largo del camino del cerro, pero solo le alcanzó para colmenas colmenas. Las abejas de dos colmenas vecinas se roban entre ellas si quedan cerca, así que quiere acomodarlas de modo que el par más cercano de todo el apiario quede lo más lejos que se pueda: si un acomodo deja dos colmenas a 3 pasos y otro las deja a 4, el bueno es el de 4.

Cada colmena va en un claro y en cada claro cabe una sola. La distancia entre dos colmenas es la diferencia de los pasos donde están sus claros. Lo que se mide de un acomodo es su separación más chica, la del par más cercano, y esa es la que hay que hacer grande. Una separación más chica nunca es más difícil de conseguir: el acomodo que deja a todas las colmenas a 4 pasos o más las deja también a 3 o más.

Escribe una función que reciba sitios, una lista de enteros distintos de 0 o más con el paso de cada claro (al menos dos, en cualquier orden), y colmenas, un entero de 2 al número de claros. Regresa un entero: la separación más chica del mejor acomodo.

Con claros en los pasos 1, 2, 8, 4 y 9 y tres colmenas, la respuesta es 3: van en el 1, el 4 y el 9, y las separaciones son 3 y 5, así que la más chica es 3. Repartir a ojo no sirve: del 1 al 9 hay 8 pasos y la cuenta fácil dice 4, pero para eso harían falta claros en el 1, el 5 y el 9, y en el 5 no hay claro.

Si Nicasio tiene una colmena por claro no hay nada que elegir: todas se ponen y la respuesta es la separación de los dos claros más cercanos.

Hay caminos de hasta 60 claros y los pasos llegan a mil millones.

Ejemplos

  • El ejemplo

    [1, 2, 8, 4, 9], 3 → 3

  • Seis claros de dos cifras

    [0, 3, 4, 7, 10, 9], 4 → 3

  • Dos colmenas nada más

    [1, 5], 2 → 4

  • Una colmena en cada claro

    [2, 5, 6, 13], 4 → 1

  • Claros parejos

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 3 → 4

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

Empiezas con esto

Python

def separacion(sitios, colmenas):
    pass

JavaScript

function separacion(sitios, colmenas) {
}
Resolver este reto

Se abre en el navegador, con el editor y las pruebas. Este reto es del plan completo; los de O(1) y O(log n) son gratis.

Más retos de O(n log n)

Ver todos los retos →