आम तौर पर, हम एक संख्या को द्विआधारी अंकों में 2 की शक्तियों के साथ
0
या1
प्रत्येक के गुणांक के साथ निर्दिष्ट करके विघटित करते हैं :
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1
की पसंद है
0
और1
... बहुत बाइनरी नहीं है। हम 2 की शक्तियों के साथ विस्तार करके सही बाइनरी विस्तार करेंगे , लेकिन इसके बजाय1
या-1
इसके गुणांक के साथ :
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1
अब यह बाइनरी दिखता है।
किसी भी सकारात्मक संख्या को देखते हुए, यह देखने के लिए तुच्छ होना चाहिए:
- हर विषम संख्या में असीम रूप से कई सच्चे द्विआधारी विस्तार होते हैं
- हर सम संख्या में कोई भी द्विआधारी विस्तार नहीं है
इसलिए, एक सच्चे द्विआधारी विस्तार को अच्छी तरह से परिभाषित करने के लिए, हमें सबसे कम लंबाई यानी कम से कम विस्तार की आवश्यकता होती है ।
किसी भी सकारात्मक, विषम पूर्णांक को देखते हुए n
, अपने वास्तविक बाइनरी विस्तार को, सबसे महत्वपूर्ण अंक से कम से कम महत्वपूर्ण अंक (या उलटा क्रम) में लौटाएं।
नियम:
- जैसा कि यह है कोड गोल्फ, आप कम से कम बाइट गिनती संभव में यह करने के लिए करना चाहिए । बिल बनाने की अनुमति है।
- कोई भी आउटपुट जो गुणांक का प्रतिनिधित्व और सूची कर सकता है वह स्वीकार्य है: एक सरणी, विभाजक के साथ गुणांक की एक स्ट्रिंग, आदि ...
- स्टैंडर्ड गोल्फिंग लूपहोल्स लागू होते हैं।
- आपका प्रोग्राम आपकी भाषा के मानक पूर्णांक आकार के मानों के लिए काम करना चाहिए।
परीक्षण के मामलों
25 -> [1,1,1,-1,-1]
47 -> [1,1,-1,1,1,1]
1 -> [1]
3 -> [1,1]
1234567 -> [1,1,-1,-1,1,-1,1,1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,1,1]
0
बजाय प्रिंट करते हैं -1
। बिट्स प्राप्त करने वाले को पता है कि उनका क्या मतलब है। (यह अभी भी एक गैर-तुच्छ बिट-हेरफेर अभ्यास है, क्योंकि एक घुमाव अधिकार केवल तभी काम करता है जब इसमें 32 महत्वपूर्ण लंबाई होती है। जैसे 5-बिट संख्या को 5 की एक चौड़ाई की आवश्यकता होती है)
111-1-1
एक वैध उत्पादन है 25
?