জন্য ডিজিটাল কঠোরতা একটি পূর্ণসংখ্যা এর, তার বাইনারি উপস্থাপনা নিই এবং যতবার গণনা উভয় একটি নেতৃস্থানীয় এবং চিহ্ন
1
পর্যন্ত এটা হয় শুরু করলে বা কোনো সঙ্গে প্রান্ত মুছে ফেলা হতে পারে0
। বিটগুলির মোট সংখ্যা হ'ল এটির ডিজিটাল কঠোরতা।
এটি বেশ কথার ব্যাখ্যা - সুতরাং আসুন এটি একটি কাজের উদাহরণ দিয়ে ভেঙে দিন।
এই উদাহরণস্বরূপ, আমরা 3167 নম্বরটি ব্যবহার করব b বাইনারিতে এটি হ'ল:
110001011111
(দ্রষ্টব্য, বাইনারি রূপান্তর করার সময়, আপনি নেতৃস্থানীয় জিরো ফেলা নিশ্চিত করা উচিত)
এটি শুরু বা শেষ হয় না 0
, তাই আমরা 1 জোড়া বিটগুলি সরিয়ে ফেলি:
1 1000101111 1
এবং অন্য:
11 00010111 11
তবে এখন শুরুতে 0 রয়েছে, তাই আমরা আর 1
জোড়া জোড়া মুছতে পারি না । মোট, 4 টি বিট আমরা সরিয়েছি এবং তাই 4 টি 3167 এর ডিজিটাল কঠোরতা ।
তবে, এমন সংখ্যার জন্য যেগুলি 2 এন -1 হিসাবে ধনাত্মক এন (যেমন কেবল 1
বাইনারি উপস্থাপনায় থাকে) হিসাবে লিখতে পারে , 0 কখনই পৌঁছাতে পারে না এবং তাই সমস্ত বিট অপসারণ করা যায়। এর অর্থ হল যে কঠোরতা কেবলমাত্র পূর্ণসংখ্যার বিট দৈর্ঘ্য।
চ্যালেঞ্জ
আপনার কাজটি হ'ল একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি অ-নেতিবাচক পূর্ণসংখ্যার প্রদত্ত হলে n >= 0
এর ডিজিটাল কঠোরতা নির্ধারণ করে।
আপনি একটি সম্পূর্ণ প্রোগ্রাম জমা দিতে পারেন যা I / O সম্পাদন করে বা এমন কোনও ফাংশন যা ফলাফল দেয় returns আপনার জমা দেওয়ার ক্ষেত্রে n
আপনার ভাষার মানক পূর্ণসংখ্যার ব্যাপ্তির মানগুলির জন্য কাজ করা উচিত ।
পরীক্ষার মামলা
এর মধ্যে কোনওটি ভুল হলে দয়া করে আমাকে জানান বা আপনি কোনও প্রান্তের কেস যুক্ত করতে চান তবে।
0 -> 0
1 -> 1
8 -> 0
23 -> 2
31 -> 5
103 -> 4
127 -> 7
1877 -> 2
2015 -> 10
আমি এই পরীক্ষাগুলি কেস উত্পন্ন করার জন্য অগল্ফড পাইথন সমাধানটি দিয়েছি (বাগ-কম হওয়ার গ্যারান্টিযুক্ত নেই):
def hardness(num) -> int:
binary = bin(num)[2:]
if binary.count('0') == 0:
return num.bit_length()
revbin = binary[::-1]
return min(revbin.find('0'), binary.find('0')) * 2
1
1 না থাকলে কীভাবে ফিরে আসবে0
? মানে, আপনি সম্ভবত স্ট্রিংটি থেকে এটি শুরু করতে বা শেষ করতে পর্যাপ্ত 1 টি সরাতে পারবেন না0
।