小さい数字が大きい数字からビットを借りることができることをご存知ですか?以下に例を示します。2つの数値5と14を考えてみましょう。最初に、それらをバイナリで書き出します。
5 14
000101 001110
最初に、大きい数値から最小のオンビットを取り、他の数値の最小のオフビットに与えます。そう
This bit turns off
|
v
000101 001110
^
|
This bit turns on
今、私たちは持っています
000111 001100
数字は7と12です。最初の数字はまだ小さいので、続けます。
000111 001100
001111 001000
これで15と8になりましたので、停止できます。この一連の操作を「ビット借入」という2つの数字と呼びます。別の例を見てみましょう。20および61。
20 61
010100 111101
010101 111100
010111 111000
111111 100000
63 32
最終結果は32、63 です。もう1つやりましょう。31と12。31はすでに12よりも大きいため、何もする必要はありません。31と12をビット借用すると、31と12は変化しません。
チャレンジ
あなたの課題は、2つの数字を受け取り、それらをビット借用するプログラムまたは関数を作成することです。2つの数値は常に正の整数になります。入力と出力は、任意の合理的な形式にすることができます。
テスト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
標準的な抜け穴が適用され、バイト単位の最短回答が勝ちます!