पूर्णांक की डिजिटल कठोरता को खोजने के लिए , इसके बाइनरी प्रतिनिधित्व को लें, और गणना करें कि एक अग्रणी और अनुगामी दोनों को
1
तब तक हटाया जा सकता है जब तक कि यह या तो शुरू या समाप्त नहीं होता है0
। हटाए गए बिट्स की कुल संख्या इसकी डिजिटल कठोरता है।
यह काफी चिंताजनक स्पष्टीकरण है - तो चलिए इसे एक उदाहरण के साथ तोड़ते हैं।
इस उदाहरण के लिए, हम संख्या 3167 का उपयोग करेंगे। बाइनरी में, यह है:
110001011111
(ध्यान दें कि, बाइनरी में रूपांतरण के दौरान, आपको अग्रणी शून्य को पट्टी करना सुनिश्चित करना चाहिए)
यह शुरू या समाप्त नहीं होता है 0
, इसलिए हम 1 जोड़ी बिट्स निकालते हैं:
1 1000101111 1
और दुसरी:
11 00010111 11
लेकिन अब शुरुआत में 0 है, इसलिए हम अब और 1
जोड़े नहीं निकाल सकते । कुल मिलाकर, 4 बिट्स हमने निकाले, और इसलिए 4 3167 की डिजिटल कठोरता है ।
हालाँकि, उन संख्याओं के लिए जिन्हें सकारात्मक n के लिए 2 n -1 के रूप में लिखा जा सकता है (अर्थात केवल बाइनरी प्रतिनिधित्व में होते हैं ), 0 कभी नहीं पहुंचेगा, और इसलिए सभी बिट्स को हटाया जा सकता है। इसका मतलब है कि कठोरता केवल पूर्णांक की लंबाई है।1
चुनौती
आप कार्य एक प्रोग्राम या फ़ंक्शन लिखना है, जो एक गैर-नकारात्मक पूर्णांक दिया जाता है n >= 0
, इसकी डिजिटल कठोरता को निर्धारित करता है।
आप एक पूर्ण कार्यक्रम प्रस्तुत कर सकते हैं जो I / O, या एक फ़ंक्शन करता है जो परिणाम देता है। आपका सबमिशन 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
जब कोई उसमें नहीं0
है तो वह कैसे 1 लौटाएगा ? मेरा मतलब है, आप इसे शुरू या अंत में रखने के लिए स्ट्रिंग से पर्याप्त रूप से 1 नहीं निकाल सकते0
।