El anuncio sin pareja
- O(log n) · Fácil
- Gratis
- Python
- JavaScript
- listas
- búsqueda
- índices
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):
passJavaScript
function sinPareja(bitacora) {
}Se abre en el navegador, con el editor y las pruebas. Es gratis y no hace falta cuenta para empezar.