प्रेरणा
में इस चुनौती अपने कार्य को दो तार गुणा करने के लिए किया गया था, यह स्वाभाविक रूप से एक स्ट्रिंग का वर्गमूल लेने के लिए एक तरह से प्रस्तुत करता है।
यह कैसे काम करता है?
एक स्ट्रिंग को देखते हुए (उदाहरण के लिए pub) पहली चीज जो आपको करने की आवश्यकता है, वह है प्रत्येक वर्ण के लिए ASCII कोड निर्धारित करना :
"pub" -> [112, 117, 98]
आगे आप प्रत्येक मूल्य [0..94]को घटाकर इस कोड को श्रेणी में मैप करते हैं 32:
[112, 117, 98] -> [80, 85, 66]
अब आपको प्रत्येक मान के लिए इसकी मूल मोडुलो 95(जैसे। 40*40 % 95 = 80आप भी चुन सकते हैं 55) खोजने की आवश्यकता है :
[80, 85, 66] -> [40, 35, 16]
और अंत में आप इसे रेंज में वापस मैप करेंगे [32..126]और इसे वापस स्ट्रिंग में बदलेंगे:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
दरअसल "HC0" ⊗ "HC0" = "pub"आप अन्य चुनौती से एक समाधान के साथ सत्यापित कर सकते हैं के रूप में यहाँ ।
मॉड्यूलर अंकगणित से परिचित लोगों ने संभवतः देखा कि वर्गमूल मॉड्यूल 95हमेशा मौजूद नहीं होता है, उदाहरण के लिए कोई जड़ नहीं है 2। ऐसे मामले में एक स्ट्रिंग का वर्गमूल परिभाषित नहीं होता है और आपका प्रोग्राम / फ़ंक्शन क्रैश हो सकता है, अनिश्चित काल के लिए लूप आदि।
आपकी सुविधा के लिए, यहाँ उन चरों की सूची दी गई है जिनमें एक वर्गमूल है (पहला एक स्थान है):
!$%&)+03489:>CDGLMQVW]`bjlpqu
नियम
- आप एक प्रोग्राम / फ़ंक्शन लिखेंगे जो एक स्ट्रिंग (या वर्णों की सूची) को एक तर्क के रूप में लेता है और यदि मौजूद है तो किसी भी वर्गमूल को वापस करता है
- आप मान सकते हैं कि इनपुट में हमेशा एक वर्गमूल होता है
- इनपुट में एक रिक्त स्ट्रिंग शामिल हो सकती है
- इनपुट प्रिंटेबल रेंज (
[32..126]) में होगा - आउटपुट या तो कंसोल पर मुद्रित होता है या यदि स्क्वायर रूट मौजूद है तो आप एक स्ट्रिंग लौटाते हैं
- यदि वर्गमूल मौजूद नहीं है, तो आपके प्रोग्राम / फ़ंक्शन का व्यवहार अपरिभाषित रह जाता है
- यदि आप रूट को प्रिंट करने के लिए चुनते हैं तो नई रूपरेखा या व्हाट्सएप ठीक है
परीक्षण के मामलों
ध्यान दें कि ये केवल एकमात्र समाधान नहीं हैं:
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94(जो कि प्रिंट करने योग्य रेंज है) होनी चाहिए , यह एक टाइपो है - इसके बारे में क्षमा करें।