Você sabia que um número pequeno pode emprestar bits de um número maior? Aqui está um exemplo. Digamos nossos dois números 5 e 14. Primeiro, escreva-os em binário:
5 14
000101 001110
Primeiro vamos dar a menor em pouco longe do maior número, e nós dar-lhe com o menor off pouco por outro número. tão
This bit turns off
|
v
000101 001110
^
|
This bit turns on
Agora temos
000111 001100
e nossos números são 7 e 12. O primeiro número ainda é menor, por isso continuamos.
000111 001100
001111 001000
Agora temos 15 e 8, para que possamos parar. Vamos chamar esse conjunto de operações de "empréstimo de bits" de dois números. Vamos fazer outro exemplo. 20 e 61.
20 61
010100 111101
010101 111100
010111 111000
111111 100000
63 32
Portanto, nosso resultado final é 32, 63. Vamos fazer mais um . 31 e 12. 31 já é maior que 12, então não há nada a fazer! O empréstimo de bits 31 e 12 fornece 31 e 12, sem alterações.
O desafio
Seu desafio é escrever um programa ou função que aceite dois números e os empreste pouco. Os dois números sempre serão números inteiros positivos. Sua entrada e saída podem estar em qualquer formato razoável.
Teste de E / S:
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
As brechas padrão se aplicam e a resposta mais curta em bytes vence!