¿Sabía que un número pequeño puede tomar prestados bits de un número mayor? Aquí hay un ejemplo. Digamos nuestros dos números 5 y 14. Primero, escríbalos en binario:
5 14
000101 001110
En primer lugar tomamos el más pequeño en poco lejos del mayor número, y se lo damos a los más pequeños fuera poco en el otro número. Entonces
This bit turns off
|
v
000101 001110
^
|
This bit turns on
Ahora tenemos
000111 001100
y nuestros números son 7 y 12. El primer número es aún más pequeño, así que continuamos.
000111 001100
001111 001000
Ahora tenemos 15 y 8, para que podamos parar. Llamaremos a este conjunto de operaciones "préstamo de bits" dos números. Hagamos otro ejemplo. 20 y 61.
20 61
010100 111101
010101 111100
010111 111000
111111 100000
63 32
Entonces nuestro resultado final es 32, 63. Hagamos uno más. 31 y 12. 31 ya es más grande que 12, ¡así que no hay nada que hacer! El préstamo de bits 31 y 12 da 31 y 12, sin cambios.
El reto
Su desafío es escribir un programa o función que tome dos números y los tome prestados. Los dos números siempre serán enteros positivos. Su entrada y salida puede estar en cualquier formato razonable.
Prueba IO:
Input: 2, 3
Output: 3, 2
Input: 3, 2
Output: 3, 2
Input: 8, 23
Output: 31, 0
Input: 42, 81
Output: 63, 0
Input: 38, 41
Output: 47, 32
Input: 16, 73
Output: 23, 0
Input: 17, 17
Output: 17, 17
Se aplican lagunas estándar, ¡y la respuesta más corta en bytes gana!