पलिंड्रोम रिवर्सल-एडिशन
रिवर्सल-एडिशन की प्रक्रिया वह जगह है जहां एक संख्या को इसके विपरीत जोड़ा जाता है जब तक कि बनाई गई संख्या एक पैलिंड्रोम नहीं होती। उदाहरण के लिए, यदि हम 68 से शुरू करते हैं, तो यह प्रक्रिया होगी:
68 + 86 => 154 + 451 => 605 + 506 => 1111
जैसा कि आप देख सकते हैं, यह एक palindromic नंबर पाने के लिए 3 परिवर्धन लिया। यदि हम साथ शुरू 89
करना चाहते थे , तो हमें 24 चरणों की आवश्यकता होगी (जो आप यहां टूटने को देख सकते हैं )।
एक पलिंड्रोम पहुंचने से पहले उठाए गए सबसे अधिक कदमों का विश्व रिकॉर्ड 261 है, जो संख्या के लिए होता है, जो संख्या 1186060307891929990
10 118 से अधिक है । हालाँकि, कुछ संख्याएँ ऐसी हैं, जिन्हें हम एक पलिंद नहीं ला पाए हैं। इन्हें लिरिकेल संख्या कहा जाता है ।
चूंकि हम बेस 10 में काम कर रहे हैं, इसलिए हम वास्तव में उन्हें केवल उम्मीदवार ही कह सकते हैं, क्योंकि इस बात का कोई सबूत नहीं है कि ये संख्या कभी भी किसी तालमेल तक नहीं पहुंचती है। उदाहरण के लिए, सबसे छोटा आधार -10 लिरिकेल उम्मीदवार 196 है, और एक अरब से अधिक पुनरावृत्तियों से गुजरा है। यदि पालिंड्रोम मौजूद है, तो यह 10 10 8.77 से बहुत बड़ा है । तुलना के रूप में, अगर यह 1s परमाणुओं पर अंकित किया गया था, तो हमें इसे लिखने के लिए परमाणुओं के लायक 2.26772 × 10 588843575 ब्रह्मांडों की आवश्यकता होगी , यह मानते हुए कि यह मौजूद है।
आपका कार्य
एक प्रोग्राम या फ़ंक्शन बनाएँ जो एक पूर्णांक इनपुट लेता है और एक पैलिंड्रोम तक पहुंचने के लिए आवश्यक चरणों की संख्या को रिटर्न या प्रिंट करता है। आपको लियकेल उम्मीदवारों से निपटने की आवश्यकता नहीं होगी (यानी आपका कार्यक्रम, जब लिक्हेलर उम्मीदवार दिया जाता है, या तो एक त्रुटि को फेंकने या हमेशा के लिए चलाने की अनुमति दी जाती है)।
परीक्षण के मामलों:
f(0) => 0
f(11) => 0
f(89) => 24
f(286) => 23
f(196196871) => 45
f(1005499526) => 109
f(1186060307891929990) => 261
नियम
बोनस
- यदि आप प्रत्येक अतिरिक्त चरण को प्रिंट करते हैं, तो स्वरूपित
n + rev(n) = m
, आप अपने स्कोर को 0.75 से गुणा कर सकते हैं । चरणों की संख्या से पहले रकम का प्रिंट आउट लेना चाहिए। - यदि आपका कोड यह पता लगा सकता है कि क्या कोई नंबर लिरिकेल उम्मीदवार है, तो आप अपने स्कोर को 0.85 से गुणा कर सकते हैं । इस मामले में यह मानने के लिए पर्याप्त है कि 261 से अधिक पुनरावृत्तियों में एक लिकरेल उम्मीदवार है। या तो कुछ भी नहीं लौटाएं, या कुछ भी ऐसा नंबर नहीं है जिसे सही उत्तर के लिए गलत किया जा सके (आदि: कोई भी स्ट्रिंग या संख्या 0-261 की सीमा में नहीं)। कोई भी त्रुटि मान्य आउटपुट (पूर्व अधिकतम पुनरावृत्ति की गहराई) से अधिक नहीं होती है और इसका पता लगाने में उपयोग नहीं किया जा सकता है।
- यदि आप दोनों बोनस पूरे करते हैं, तो 0.6 से गुणा करें ।
यह कोड-गोल्फ है , इसलिए कम से कम बाइट्स जीतती हैं।
यह कोड स्निपेट दोनों बोनस के साथ पायथन 3 में एक उदाहरण समाधान दिखाता है।
def do(n,c=0,s=''):
m = str(n)
o = m[::-1]
if c > 261:
return "Lychrel candidate"
if m == o:
print(s)
return c
else:
d = int(m)+int(o)
s+="%s + %s = %s"%(m,o,str(d))
return do(d,c+1,s)
*0.6
बोनस दूसरों के शीर्ष पर है? या यह सिर्फ इतना ही है?
10 + 01 = 11
या 10 + 1 = 11
या यह हमारे पर निर्भर है?
262
?