Saltar al contenido

El anuncio sin pareja

Enunciado

Bonifacio atiende la cabina de la radio del pueblo. Cada anuncio que se contrata sale al aire dos veces al día, y al cerrar la cabina imprime la bitácora: el número de cada anuncio que se transmitió, ordenada de menor a mayor. Hoy la bitácora salió con un renglón de más, porque un anuncio quedó con una sola transmisión.

Recibes la bitácora y regresas el número de ese anuncio. En 3, 3, 7, 7, 9, 12 y 12 el anuncio sin pareja es el 9.

La bitácora siempre trae un número impar de renglones, todos los demás anuncios aparecen exactamente dos veces, y el solitario puede ser el primero o el último. Hay bitácoras de hasta 61 renglones.

Idea: mientras las parejas van completas, el primer renglón de cada una cae en una posición par, contando desde 0: la 0 con la 1, la 2 con la 3, la 4 con la 5. Desde el anuncio solitario eso se rompe y las parejas arrancan en posición impar.

Entonces compara siempre de dos en dos, con las parejas tal como vienen desde el arranque de la bitácora: te paras en una posición par y la comparas con la de al lado. Si el renglón de en medio te cae en posición impar, muévete al renglón par que está justo atrás antes de comparar; si no, acabarías comparando dos renglones de parejas distintas y la cuenta ya no te dice nada.

Si los dos números son iguales, el solitario está más adelante; si son distintos, está en esa posición o antes. Cada comparación te deja con la mitad de la bitácora.

Ejemplos

  • El ejemplo

    [3, 3, 7, 7, 9, 12, 12] → 9

  • El primero quedó solo

    [4, 7, 7, 11, 11] → 4

  • El último quedó solo

    [1, 1, 2, 2, 5] → 5

  • Un solo renglón

    [6] → 6

  • El solitario a la mitad

    [1, 1, 4, 5, 5, 8, 8] → 4

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

Empiezas con esto

Python

def sin_pareja(bitacora):
    pass

JavaScript

function sinPareja(bitacora) {
}
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 →