यह मजेदार था! हालाँकि केवल तीन अंकों के साथ, मज़ा बहुत जल्द खत्म हो गया। यह चुनौती समान है, लेकिन हम मज़े लेते रहेंगे।
चुनौती
संभव के रूप में गोल्डन अनुपात Print के कई अंकों के रूप में प्रिंट करें । गोल्डन रेशियो को उस संख्या के रूप में परिभाषित किया जाता है जो φ = (1 + 1) / ies को संतुष्ट करती है और पहले 100 अंक निम्न द्वारा दिए गए हैं:
1,6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
यह चुनौती कंप्यूटिंग के बारे में नहीं है computing! यह दो बार करने के लिए किसी भी विधि का उपयोग किए बिना संभव के रूप में कई अंकों की छपाई के बारे में है। इसलिए अपने अंकों को प्राप्त करने के लिए जितने रचनात्मक तरीके हैं, उतने रचनात्मक तरीके खोजें!
प्रतिबंध
अपने आप से, φ के अंकों को प्रिंट करना थोड़ा सरल होगा, इसलिए यहां नियम हैं:
- आपको संख्या को बाएं से दाएं क्रम में बनाना है , या तो इसे टुकड़ा से प्रिंट करके या बाएं से दाएं एक स्ट्रिंग का निर्माण करके इसे अंत में प्रिंट करना है - आप अंकों का एक सरणी भी उत्पन्न कर सकते हैं और फिर इसे जोड़ सकते हैं और इसे तब तक प्रिंट करें, जब तक आप इसे क्रम में करते हैं। निम्नलिखित नियमों में "प्रिंट" और "आउटपुट" उन प्रक्रियाओं में से किसी को संदर्भित कर सकते हैं (जैसे कि यदि आप एक स्ट्रिंग का निर्माण कर रहे हैं, और स्ट्रिंग में पहले से मुद्रित
1.6
होने के रूप में मायने रखता है1.6
)। - आपके कोड के लिए आपको प्रति अंक 15 वर्णों का बजट मिलता है । उस बजट की अवधि की गणना नहीं की जाती है, लेकिन इसे भी मुद्रित किया जाना है। ध्यान दें कि प्रतिबंध केवल कुल कोड आकार पर है: आप किसी भी अंक के लिए 15 से अधिक वर्णों का उपयोग कर सकते हैं जब तक कि आप औसत पर अधिक उपयोग न करें। वास्तव में, आप वर्णों में "ऋण" का निर्माण कर सकते हैं और बाद में इसका भुगतान कर सकते हैं। उदाहरण के लिए
1.618
आपके पास ६० अक्षर हैं। - मानक-पुस्तकालय में कोड आकार के लिए / आयात शामिल नहीं हैं। लेकिन आप उन लोगों को मुफ्त में आशुलिपि के अलाउंस नहीं दे सकते हैं!
- आप वर्तमान में जो अंक उत्पन्न कर रहे हैं, उसका उपयोग नहीं करना चाहिए, और न ही आपने पहले से ही छपवाया है। ईजी
1
आपके स्रोत कोड में कहीं भी दिखाई दे सकता है, क्योंकि यह बहुत पहला अंक है। कोड जो आउटपुट करता8
है1.618
वह किसी भी या सभी अंकों का उपयोग कर सकता है[0234579]
, लेकिन कोई भी नहीं[168]
। इस प्रयोजन के लिए, सभी शाब्दिक जो कि एक अंक के बराबर हैं, को उस अंक के रूप में माना जाता है । इसलिए यदि आपकी भाषा का प्रतिनिधित्व कर सकते हैं9
क्योंकि'\t'
आपको कहीं भी उपयोग करने की अनुमति नहीं है, जहां आप9
इसके बजाय उपयोग नहीं कर सकते । - आपको एक साथ कई अंक नहीं बनाने चाहिए। एक बार में एक अंक उत्पन्न करने वाले अपने कोड को स्पष्ट रूप से विखंडित करना संभव होना चाहिए।
आपको किसी भी अंतर्निहित फ़ंक्शन, गणितीय / बूलियन / बिट-वार / स्ट्रिंग ऑपरेटर, चर या निरंतर का उल्लेख नहीं करना चाहिए जो आपने उस कोड में उपयोग किया है जो एक पूर्व अंक उत्पन्न करता था। अपवाद पूर्णांक-से-स्ट्रिंग रूपांतरण, स्ट्रिंग संयोजन और मुद्रण कार्य हैं जो आपको हर एक अंक के लिए आवश्यक हो सकते हैं। ध्यान दें कि इससे कोई फर्क नहीं पड़ता कि आप किस नाम से किसी अंतर्निहित का उल्लेख करते हैं: सिर्फ इसलिए कि आप
PI
दोनों को एक अंतर्निहित खाता बनाते हैंp
औरq
इसका मतलब यह नहीं है कि आपकोp
एक बार औरq
एक बार उपयोग करना है । इसी तरह, आप कर रहे हैं एक नाम दो बार उपयोग करने के लिए अगर यह स्ट्रिंग की तरह, दो अलग अलग बनाया-इन को संदर्भित करता है की अनुमति दीlength
और सरणीlength
।यदि आपकी प्रोग्रामिंग लैंग्वेज में फ़ंक्शंस नहीं हैं, तो आपके सबसे अच्छे निर्णय का उपयोग इस बात के लिए किया जाएगा कि समतुल्य क्या है - उदाहरण के लिए बैश स्क्रिप्टिंग के लिए, अन्य प्रोग्रामों को लागू करने के लिए फ़ंक्शंस पर लगाए गए नियमों का पालन करना चाहिए।
- आपका सबमिशन एक ही भाषा में लिखा जाना चाहिए। इसलिए उस भाषा के बिल्ट-इन तक पहुँच पाने के लिए किसी अन्य भाषा के दुभाषिए को क्रियान्वित नहीं करना।
निहितार्थ
निम्नलिखित नियम उपरोक्त नियमों द्वारा निहित हैं, लेकिन मैं उन्हें यहां उन सवालों से बचने के लिए जोड़ता हूं जो पहले ही सैंडबॉक्स में आ चुके हैं ::
- आपको
'\b'
बीच में कुछ बैकस्पेस (आमतौर पर ) को प्रिंट करके अपने आउटपुट के कुछ हिस्सों को ओवरराइट करने की अनुमति नहीं है । - लूप जो कई अंकों को उत्पन्न / आउटपुट करते हैं, निषिद्ध हैं। (एक अंक की गणना करने वाले लूप ठीक होते हैं, हालांकि)
(1 + √5)/2
किसी एक से अधिक अंक प्राप्त करने के लिए एक अस्पष्ट संस्करण का उपयोग करना या फिबोनाची संख्याओं को विभाजित करना निषिद्ध है।- आप 10 अंकों को पहले से निर्धारित नहीं कर सकते हैं और उन्हें 10 चर में संग्रहीत कर सकते हैं और फिर उन का संदर्भ ले सकते हैं, क्योंकि वे चर संदर्भ न तो अंक उत्पन्न करते हैं - जो कोड चर को भरता है, इसलिए यह नियम 6 का उल्लंघन है।
- वास्तव में, आप किसी भी पिछले (या मध्यवर्ती परिणाम) का पुन: उपयोग नहीं कर सकते, क्योंकि इसका मतलब होगा कि दो अंक उत्पन्न होने के लिए कोड साझा करेंगे ।
- अन्यथा, आप अंकों को उत्पन्न करने के लिए किसी भी तरह (जो कि विशुद्ध रूप से गणितीय नहीं है) का उपयोग कर सकते हैं। (और आपको करना चाहिए!)
- वास्तव में कुछ भी गणना करने की आवश्यकता नहीं है, यदि आप अपने मानक पुस्तकालय का उपयोग करके कई अलग-अलग स्थानों से सही अंक निकाल सकते हैं।
- आप एकल अंक उत्पन्न करते समय कई बार ऑपरेटर का उपयोग कर सकते हैं, इसलिए
2+2+2
पहला उत्पन्न करने के लिए उचित खेल है6
(हालांकि यह सबसे कम संभावना नहीं है)। - आप कर सकते हैं , जैसा कि अक्सर आप चाहते हैं के रूप में किसी भी शाब्दिक उपयोग करें, क्योंकि वे निर्मित नहीं कर रहे हैं स्थिरांक। तो जब तक आपको प्रिंट नहीं करना है
5
, तब तक आप5
अपने कोड में बहुत से एस चाहते हैं। - आप आउटपुट को हार्डकोड नहीं कर सकते, क्योंकि इसमें आपके द्वारा आउटपुट किए जा रहे अंकों का उपयोग करना शामिल होगा।
संक्षेप में: दो बार अंक उत्पन्न करने की किसी भी विधि का उपयोग न करें और उस अंक का उपयोग न करें जो आप वर्तमान में आउटपुट कर रहे हैं या किसी ने पहले ही प्रिंट कर लिया है।
यदि आप एक खामियों को दूर करते हैं जो आपको एक (अर्ध-) अनंत स्कोर प्राप्त करने की अनुमति देता है, तो कृपया इसे शोषण करके चुनौती को बर्बाद न करें, लेकिन मुझे बताएं ताकि मैं देख पाऊं कि क्या लूपहोल को कुछ भी तोड़ने के बिना तय किया जा सकता है।
स्कोरिंग
वह प्रोग्राम जो सबसे अधिक अंकों को प्रिंट करता है, सही तरीके से जीतता है। एक टाई के मामले में कम कोड टाई को तोड़ देता है।
कृपया एक असम्बद्ध टिप्पणी संस्करण जोड़ें जो आपके कोड के किस हिस्से को पहचानता है कि कौन सा अंक उत्पन्न करता है।
पुनश्च: यदि कोई 100 अंकों के ऊपर धड़कता है, तो यहां कुछ और हैं ।
x = (x+1)/x
(या x^2 = x+1
) (या x^2-x+1
) पर द्विघात सूत्र का उपयोग कर रहा है ।