คุณรู้หรือไม่ว่ามีจำนวนน้อยสามารถยืมบิตจากจำนวนที่มากขึ้นได้? นี่คือตัวอย่าง สมมุติว่าตัวเลขสองตัวของเราคือ 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 ดังนั้นเราจึงหยุด เราจะเรียกตัวเลขสองตัวนี้ว่า "การยืมบิต" ลองทำอีกตัวอย่าง 20 และ 61
20 61
010100 111101
010101 111100
010111 111000
111111 100000
63 32
ดังนั้นผลสุดท้ายของเราคือ 32, 63 ให้ทำอย่างใดอย่างหนึ่งมากขึ้น 31 และ 12. 31 ใหญ่กว่า 12 อยู่แล้วดังนั้นไม่มีอะไรทำ! การยืมบิต 31 และ 12 ให้ 31 และ 12 ไม่มีการเปลี่ยนแปลง
ความท้าทาย
ความท้าทายของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ตัวเลขสองตัวและยืมบิตเหล่านั้น ตัวเลขสองจำนวนนั้นจะเป็นจำนวนเต็มบวกเสมอ อินพุตและเอาต์พุตของคุณสามารถอยู่ในรูปแบบที่เหมาะสม
ทดสอบ 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
ช่องโหว่มาตรฐานนำไปใช้และคำตอบที่สั้นที่สุดในไบต์ชนะ!