Billones y billones de mensajes cruzan a toda velocidad entre la Tierra y las galaxias vecinas cada milisegundo. Pero transmitir a distancias tan largas es complicado. Molestas llamaradas solares, distorsiones temporales, fuerzas errantes y hasta el aleteo del ala de una mariposa espacial pueden hacer que un bit aleatorio cambie durante la transmisión.
Ahora imagina las consecuencias:
Detectar mensajes corruptos no es solo importante: es crítico. El receptor debe saber cuándo algo ha salido mal, antes de que ocurra el desastre.
¿Pero cómo? Científicos e ingenieros de todo el universo llevan eones luchando contra este problema. Supercúmulos cósmicos enteros de IA procesan los datos sin descanso. Y entonces, un día, resurge una leyenda: un método antiguo y poderoso, susurrado en foros de depuración, murmullado por ingenieros que ya han visto demasiado...
¡El bit de paridad!
Un método tan simple y tan poderoso que bien podría salvar la comunicación interestelar.
Tu tarea es ayudar a implementar
Un bit de paridad es una forma sencilla de detectar errores de transmisión.
Los transmisores y los receptores solo pueden transmitir y recibir exactamente ocho bits a la vez (incluido el bit de paridad).
El bit de paridad se establece de modo que haya un número par de bits en 1 en cada transmisión, y el bit de paridad siempre es el primer bit por la derecha.
Así que si el receptor recibe 11000001, 01110101 o 01000000 (es decir, una transmisión con un número impar de bits en 1), sabe que hay un error.
Sin embargo, los mensajes rara vez son tan cortos, y cuando son más largos hay que transmitirlos en una secuencia.
Por ejemplo, considera el mensaje 11000000 00000001 11000000 11011110 (o C0 01 C0 DE en hexadecimal).
Como cada transmisión contiene exactamente ocho bits, solo puede contener siete bits de datos y el bit de paridad. Entonces hay que insertar un bit de paridad después de cada siete bits de datos:
11000000 00000001 11000000 11011110
↑ ↑ ↑ ↑ (7th bits)
La secuencia de transmisión de este mensaje se ve así:
1100000_ 0000000_ 0111000_ 0001101_ 1110
↑ ↑ ↑ ↑ (parity bits)
Los datos de la primera transmisión de la secuencia (1100000) tienen dos bits en 1 (un número par), así que el bit de paridad es 0.
La primera transmisión queda como 11000000 (o C0 en hexadecimal).
Los datos de la siguiente transmisión (0000000) tienen cero bits en 1 (otra vez un número par), así que el bit de paridad vuelve a ser 0.
La segunda transmisión queda entonces como 00000000 (o 00 en hexadecimal).
Los datos de las dos transmisiones siguientes (0111000 y 0001101) tienen tres bits en 1.
Sus bits de paridad se establecen en 1 para que tengan un número par de bits en 1 en la transmisión.
Se transmiten como 01110001 y 00011011 (o 71 y 1B en hexadecimal).
La última transmisión (1110) solo tiene cuatro bits de datos.
Como se transmiten exactamente ocho bits a la vez y el bit de paridad es el bit más a la derecha, se añaden tres bits en 0 y luego el bit de paridad para completar los ocho bits.
Ahora se ve así (donde _ es el bit de paridad):
1110 000_
↑↑↑ (added 0 bits)
Hay otra vez un número impar de bits en 1, así que el bit de paridad es 1.
La última transmisión de la secuencia queda como 11100001 (o E1 en hexadecimal).
La secuencia de transmisión completa de este mensaje es 11000000 00000000 01110001 00011011 11100001 (o C0 00 71 1B E1 en hexadecimal).
Regístrate en Exercism para aprender y dominar ARM64 Assembly con 78 ejercicios y mentoría humana real, todo gratis.