Saviez-vous qu'un petit nombre peut emprunter des bits à un plus grand nombre? Voici un exemple. Disons nos deux nombres 5 et 14. Tout d'abord, écrivez-les en binaire:
5 14
000101 001110
D' abord , nous prenons le plus petit sur peu loin du plus grand nombre, et nous donnons au plus petit de peu sur l'autre numéro. Donc
This bit turns off
|
v
000101 001110
^
|
This bit turns on
Maintenant nous avons
000111 001100
et nos nombres sont 7 et 12. Le premier nombre est encore plus petit, alors nous continuons.
000111 001100
001111 001000
Nous avons maintenant 15 et 8, donc nous pouvons arrêter. Nous appellerons cet ensemble d'opérations "emprunt de bits" deux nombres. Faisons un autre exemple. 20 et 61.
20 61
010100 111101
010101 111100
010111 111000
111111 100000
63 32
Donc, notre résultat final est 32, 63. Faisons-en un de plus. 31 et 12. 31 est déjà plus grand que 12, donc il n'y a rien à faire! L'emprunt de bits 31 et 12 donne 31 et 12, aucun changement.
Le défi
Votre défi est d'écrire un programme ou une fonction qui prend deux nombres et les emprunte en bits. Les deux nombres seront toujours des entiers positifs. Vos entrées et sorties peuvent être dans n'importe quel format raisonnable.
Test 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
Les failles standard s'appliquent et la réponse la plus courte en octets gagne!