একটি পজিটিভ সংখ্যা n দেওয়া আছে। এর বাইনারি রিপ্রেজেন্টেশনে বাম থেকে ডান ক্রমাগত ১-এর ব্লক들의 দৈর্ঘ্য ক্রমবর্ধমান (increasing) কিনা যাচাই করতে হবে।
উদাহরণ
ইনপুট: n = 1775
আউটপুট: True
ব্যাখ্যা: ১৭৭৫ = 11011101111 (বাইনারি), ব্লক দৈর্ঘ্য: ২, ৩, ৪ (ক্রমবর্ধমান)।
অ্যালগরিদম
- বাইনারি স্ট্রিং বানান।
- ক্রমাগত ১ গুনুন, ০ পাওয়া গেলে ব্লক দৈর্ঘ্য সংরক্ষণ করুন।
- প্রতিটি ব্লক দৈর্ঘ্য পূর্ববর্তী ব্লক থেকে বড় কিনা চেক করুন।
উদাহরণ কোড
def solve(n):
bits_pattern = list(bin(n))
bit_count = len(bits_pattern)
p_cnt = 0
c_cnt = 0
i = 0
while i < bit_count:
if bits_pattern[i] == '1':
c_cnt += 1
i += 1
elif bits_pattern[i - 1] == '0':
i += 1
c_cnt = 0
continue
else:
if c_cnt < p_cnt:
return False
i += 1
p_cnt = c_cnt
c_cnt = 0
if p_cnt > c_cnt and c_cnt != 0:
return False
return True
n = 1775
print(solve(n)) # Output: True
ইনপুট
1775
আউটপুট
True