Czy wiesz, że mała liczba może pożyczyć bity od większej liczby? Oto przykład. Powiedzmy, że nasze dwie liczby 5 i 14. Najpierw napisz je dwójkowo:
5 14
000101 001110
Pierwszy bierzemy najmniejszy na nieco z dala od większej liczby i dajemy je do najmniejszego off nieco na inny numer. Więc
This bit turns off
|
v
000101 001110
^
|
This bit turns on
Teraz mamy
000111 001100
a nasze liczby to 7 i 12. Pierwsza liczba jest jeszcze mniejsza, więc kontynuujemy.
000111 001100
001111 001000
Teraz mamy 15 i 8, więc możemy przestać. Ten zestaw operacji nazwiemy „pożyczaniem bitów” dwoma liczbami. Zróbmy inny przykład. 20 i 61.
20 61
010100 111101
010101 111100
010111 111000
111111 100000
63 32
Więc nasz wynik końcowy to 32, 63. Zróbmy jeszcze jeden . 31 i 12. 31 jest już większy niż 12, więc nie ma nic do roboty! Pożyczanie bitów 31 i 12 daje 31 i 12, bez zmian.
Wyzwanie
Twoim wyzwaniem jest napisanie programu lub funkcji, która pobierze dwie liczby i pożyczy je bit. Te dwie liczby zawsze będą dodatnimi liczbami całkowitymi. Twoje dane wejściowe i wyjściowe mogą być w dowolnym rozsądnym formacie.
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
Obowiązują standardowe luki, a najkrótsza odpowiedź w bajtach wygrywa!