मान लीजिए हमारे पास दो संख्याएं x और y और एक दी गई रेंज (left, right) है। हमें जांचना है कि दोनों दी गई संख्याओं में left से right रेंज के सभी बिट्स एक-दूसरे के पूरक (complement) हैं या नहीं। ध्यान रखें कि दाएं से बाएं, इसलिए सबसे कम महत्वपूर्ण बिट को पहली स्थिति माना जाता है।
उदाहरण के लिए, यदि x = 41, y = 54, left = 2, right = 5 है, तो आउटपुट True होगा क्योंकि 41 और 54 का बाइनरी प्रतिनिधित्व 101001 और 110110 है। x और y के 2 से 5 रेंज के बिट्स "1001" और "0110" हैं जो एक-दूसरे के पूरक हैं।
हल करने का तरीका
- temp := x XOR y
- यदि temp के रेंज (left, right) में सभी बिट्स 1 हैं, तो True लौटाएं, अन्यथा False
XOR से पूरक बिट्स 1 हो जाते हैं, इसलिए रेंज में सभी बिट्स 1 होने चाहिए।
उदाहरण
def are_all_setbits_in_range(n, left, right):
val = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1)
new_value = n & val
if val == new_value:
return True
return False
def solve(x, y, left, right):
temp = x ^ y
return are_all_setbits_in_range(temp, left, right)
x = 41
y = 54
left = 2
right = 5
print(solve(x, y, left, right))
इनपुट
41, 54, 2, 5
आउटपुट
True