परिचय
हमारे पास अतीत में कुछ आधार रूपांतरण की चुनौतियाँ हैं, लेकिन बहुतों को मनमानी लंबाई की संख्या से निपटने के लिए डिज़ाइन नहीं किया गया है (यह कहना है, संख्याएँ जो लंबे समय से पर्याप्त हैं कि वे पूर्णांक डेटा ओवरफ्लो करते हैं), और उनमें से, सबसे थोड़ा महसूस किया उलझा हुआ। मैं उत्सुक हूं कि इस तरह से आधार कोड में बदलाव कैसे किया जा सकता है।
चुनौती
अपनी पसंद की भाषा में एक प्रोग्राम या फ़ंक्शन लिखें जो एक आधार के स्ट्रिंग को दूसरे आधार की स्ट्रिंग में बदल सकता है। इनपुट को परिवर्तित (स्ट्रिंग), बेस-बेस (बेस -10 नंबर), टू-बेस (बेस -10 नंबर), और कैरेक्टर सेट (स्ट्रिंग) होना चाहिए। आउटपुट परिवर्तित संख्या (स्ट्रिंग) होनी चाहिए।
कुछ और विवरण और नियम इस प्रकार हैं:
- परिवर्तित की जाने वाली संख्या एक गैर-नकारात्मक पूर्णांक होगी (क्योंकि
-
और.
वर्ण सेट में हो सकती है)। तो भी आउटपुट होगा। - अग्रणी शून्य (चरित्र सेट में पहला चरित्र) को छंटनी चाहिए। यदि परिणाम शून्य है, तो एकल शून्य अंक रहना चाहिए।
- न्यूनतम समर्थित आधार श्रेणी 2 से 95 तक होती है, जिसमें प्रिंट करने योग्य एससीआई अक्षर शामिल होते हैं।
- संख्या को परिवर्तित करने के लिए इनपुट, वर्ण सेट, और आउटपुट सभी स्ट्रिंग डेटाटाइप का होना चाहिए। आधार बेस -10 पूर्णांक डेटाटाइप (या पूर्णांक फ़्लोट्स) का होना चाहिए।
- इनपुट नंबर स्ट्रिंग की लंबाई बहुत बड़ी हो सकती है। एक समझदार न्यूनतम की मात्रा को निर्धारित करना कठिन है, लेकिन यह अपेक्षा करें कि यह कम से कम 1000 वर्णों को संभालने में सक्षम हो, और एक सभ्य मशीन पर कम से कम 10 सेकंड में 100 वर्णों का इनपुट पूरा कर सके (इस तरह की समस्या के लिए बहुत उदार है, लेकिन मुझे नहीं चाहिए फोकस होने की गति)।
- आप बिल्ट-इन-बेस फ़ंक्शन का उपयोग नहीं कर सकते।
- वर्ण सेट इनपुट किसी भी व्यवस्था में हो सकता है, न केवल ठेठ 0-9a-z ... आदि।
- मान लें कि केवल मान्य इनपुट का उपयोग किया जाएगा। त्रुटि से निपटने के बारे में चिंता न करें।
विजेता को सबसे कम कोड द्वारा निर्धारित किया जाएगा जो मानदंडों को पूरा करता है। उनका चयन कम से कम 7 बेस -10 दिनों में किया जाएगा, या यदि / जब पर्याप्त सबमिशन हो गए हों। एक टाई होने की स्थिति में, जो कोड तेजी से चलता है वह विजेता होगा। यदि गति / प्रदर्शन में पर्याप्त करीब है, तो पहले आया जवाब जीत जाता है।
उदाहरण
यहां इनपुट और आउटपुट के कुछ उदाहरण दिए गए हैं जिन्हें आपके कोड को संभालने में सक्षम होना चाहिए:
F("1010101", 2, 10, "0123456789")
> 85
F("0001010101", 2, 10, "0123456789")
> 85
F("85", 10, 2, "0123456789")
> 1010101
F("1010101", 10, 2, "0123456789")
> 11110110100110110101
F("bababab", 2, 10, "abcdefghij")
> if
F("10", 3, 2, "0123456789")
> 11
F("<('.'<)(v'.'v)(>'.'>)(^'.'^)", 31, 2, "~!@#$%^v&*()_+-=`[]{}|';:,./<>? ")
> !!~~~~~~~!!!~!~~!!!!!!!!!~~!!~!!!!!!~~!~!~!!!~!~!~!!~~!!!~!~~!!~!!~~!~!!~~!!~!~!!!~~~~!!!!!!!!!!!!~!!~!~!~~~~!~~~~!~~~~~!~~!!~~~!~!~!!!~!~~
F("~~~~~~~~~~", 31, 2, "~!@#$%^v&*()_+-=`[]{}|';:,./<>? ")
> ~
F("9876543210123456789", 10, 36, "0123456789abcdefghijklmnopqrstuvwxyz")
> 231ceddo6msr9
F("ALLYOURBASEAREBELONGTOUS", 62, 10, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
> 6173180047113843154028210391227718305282902
F("howmuchwoodcouldawoodchuckchuckifawoodchuckcouldchuckwood", 36, 95, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!@#$%^&*()_-+=[{]}\\|;:'\",<.>/? ")
> o3K9e(r_lgal0$;?w0[`<$n~</SUk(r#9W@."0&}_2?[n
F("1100111100011010101010101011001111011010101101001111101000000001010010100101111110000010001001111100000001011000000001001101110101", 2, 95, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!@#$%^&*()_-+=[{]}\\|;:'\",<.>/? ")
> this is much shorter
You cannot use built in change-of-base functions to convert the entire input string/number at once
? विशेष रूप से, क्या मैं इनपुट को इंटरमीडिएट बेस में बदलने के लिए बिल्ट-इन का उपयोग कर सकता हूं? क्या फिर मैं एक अंतर्निहित लक्ष्य का उपयोग करके लक्ष्य के आधार पर परिवर्तित कर सकता हूं? कुछ करना चाहेंगे convert input with canonical form for given base; convert to base 10; convert to target base; convert back to specified character set with string replacement
?