पृष्ठभूमि
यहाँ पर अधिकांश लोगों को कुछ पूर्णांक आधार प्रणालियों से परिचित होना चाहिए: दशमलव, बाइनरी, हेक्साडेसिमल, ऑक्टल। हेक्साडेसिमल प्रणाली में उदाहरण के लिए, एक नंबर abc.de 16 का प्रतिनिधित्व करते हैं
a*16^2 + b*16^1 + c*16^0 + d*16^-1 + e*16^-2
हालाँकि, कोई भी गैर-पूर्णांक आधारों का उपयोग कर सकता है, जैसे अपरिमेय संख्या। एक बार ऐसा आधार सुनहरा अनुपात (= (1 + /5) / 2 18 1.618 ... का उपयोग करता है । इन्हें पूर्णांक आधारों के अनुरूप परिभाषित किया गया है। तो एक संख्या abc.de φ (जहां एक से e पूर्णांक अंक हैं) का प्रतिनिधित्व करेगा
a*φ^2 + b*φ^1 + c*φ^0 + d*φ^-1 + e*φ^-2
ध्यान दें कि सिद्धांत में कोई भी अंक ऋणात्मक हो सकता है (हालाँकि हम इसके लिए अभ्यस्त नहीं हैं) - हम अग्रणी के साथ ऋणात्मक अंक का प्रतिनिधित्व करेंगे ~
। इस सवाल हम से अंक के लिए अपने आप को प्रतिबंधित करने के उद्देश्य से ~9
करने के लिए 9
, तो हम स्पष्ट रूप से (बीच में टाइल्ड के साथ) एक स्ट्रिंग के रूप में एक नंबर लिख सकते हैं। इसलिए
-2*φ^2 + 9*φ^1 + 0*φ^0 + -4*φ^-1 + 3*φ^-2
के रूप में लिखा जाएगा ~290.~43
। ऐसे नंबर को हम एक फाइलेर नंबर कहते हैं ।
एक फ़ाइनल संख्या को हमेशा मानक रूप में दर्शाया जा सकता है , जिसका अर्थ है कि प्रतिनिधित्व केवल अंकों का उपयोग करता है 1
और 0
, बिना 11
कहीं भी शामिल है, और यह इंगित करने के लिए कि वैकल्पिक संख्या नकारात्मक है। (दिलचस्प रूप से, प्रत्येक पूर्णांक में मानक रूप में एक अद्वितीय परिमित प्रतिनिधित्व होता है।)
ऐसे मानक जो मानक रूप में नहीं हैं, उन्हें हमेशा निम्नलिखित टिप्पणियों का उपयोग करके मानक रूप में परिवर्तित किया जा सकता है:
- 011 φ = 100 φ (क्योंकि φ 2 = φ +1)
- 0200 φ = 1001 φ (क्योंकि φ 2 + 1 / φ = 2φ)
- 0 ~ 10 φ = ~ 101 φ (क्योंकि φ - 1 / φ = 1)
के अतिरिक्त:
- यदि सबसे महत्वपूर्ण अंक
~1
(शेष संख्या मानक रूप के साथ) है, तो संख्या ऋणात्मक है, और हम इसे सभी को स्वैप करके1
और~1
शून्य से ऊपर के तीन नियमों को फिर से लागू करते हुए मानक स्वरूप में परिवर्तित कर सकते हैं। मानक रूप प्राप्त करें।
यहां इस तरह के सामान्यीकरण का एक उदाहरण दिया गया है (मैं सकारात्मक अंकों के लिए अतिरिक्त रिक्त स्थान का उपयोग कर रहा हूं, प्रत्येक अंक की स्थिति को संरेखित करने के लिए):
1~3.2~1φ
1~3. 2~1φ Rule:
= 0~2. 3~1φ (3)
= ~1~1. 4~1φ (3)
= ~1 0 0. 4~1φ (3)
= ~1 0 0. 3 0 1φ (3)
= ~1 0 1. 1 0 2φ (2)
= ~1 1 0. 0 0 2φ (1)
= ~1 1 0. 0 1 0 0 1φ (2)
= - 1~1 0. 0~1 0 0~1φ (4)
= - 0 0 1. 0~1 0 0~1φ (3)
= - 0 0 1.~1 0 1 0~1φ (3)
= - 0 0 0. 0 1 1 0~1φ (3)
= - 0 0 0. 0 1 1~1 0 1φ (3)
= - 0 0 0. 0 1 0 0 1 1φ (3)
= - 0 0 0. 0 1 0 1 0 0φ (1)
उपज ।-0.0101φ
आगे पढ़ने के लिए, विकिपीडिया विषय पर एक बहुत ही जानकारीपूर्ण लेख है ।
चुनौती
इसलिए, या अन्यथा, एक प्रोग्राम या फ़ंक्शन लिखें, जो एक स्ट्रिंग को दिए गए एक फ़ाइनल नंबर (जैसा कि ऊपर वर्णित है), अपने मानक रूप का उत्पादन करता है, जो कि अग्रणी या अनुगामी शून्य के बिना। इनपुट में आवश्यक रूप से फ़ाइनल बिंदु नहीं होता है, लेकिन इसमें हमेशा बचे हुए अंक (इसलिए नहीं .123
) होते हैं। आउटपुट में हमेशा फ़ाइनल बिंदु और उसके बाईं ओर कम से कम एक अंक शामिल होना चाहिए।
आप STDIN, ARGV या फ़ंक्शन तर्क के माध्यम से इनपुट ले सकते हैं और परिणाम को वापस कर सकते हैं या इसे STDOUT में प्रिंट कर सकते हैं।
आप उपरोक्त प्रक्रिया की तुलना में एक अलग एल्गोरिथ्म का उपयोग कर सकते हैं जब तक कि यह सिद्धांत रूप में सही और मनमाना (वैध) इनपुट के लिए सटीक हो - यानी, एकमात्र सीमा जो आपके कार्यान्वयन को संभावित रूप से तोड़ सकती है, वह तकनीकी सीमाएं होनी चाहिए जैसे कि बिल्ट-इन का आकार डेटा प्रकार या उपलब्ध रैम। उदाहरण के लिए, फ्लोटिंग-पॉइंट नंबर के रूप में इनपुट का मूल्यांकन करना और फिर अंकों को लालच से भरने की अनुमति नहीं है, क्योंकि किसी को इनपुट मिल सकता है जिसके लिए फ़्लोटिंग-पॉइंट अशुद्धियाँ गलत परिणाम देगी।
यह कोड गोल्फ है, सबसे छोटा उत्तर (बाइट्स में) जीतता है।
परीक्षण के मामलों
Input Output
1 1.
9 10010.0101
1.618 10000.0000101
1~3.2~1 -0.0101
0.~1021 0. (or -0.)
105.~2 1010.0101
~31~5.~1 -100000.1001