क्विन ब्लॉग श्रृंखला के पिछले साहसिक कार्यों में, हमने पता लगाया कि अपनी खुद की क्वीन्स और इंट्रोन्स कैसे लिखें। आज हम देखेंगे कि क्विन रिले क्या हैं और आप उन्हें बनाने के लिए इंट्रोन्स का लाभ कैसे उठा सकते हैं।
कार्यक्रमों के एक समूह की कल्पना करें, प्रत्येक एक अलग भाषा में लिखा गया है। इस सर्कल में प्रत्येक प्रोग्राम का एक ही उद्देश्य होता है: अनुक्रम में अगले प्रोग्राम के स्रोत कोड को प्रिंट करना। अंतिम प्रोग्राम फिर पहले प्रोग्राम के स्रोत कोड को प्रिंट करके लूप को बंद कर देता है।
अनिवार्य रूप से, क्विन रिले n विभिन्न भाषाओं में n प्रोग्रामों का एक सेट है, जैसे:
आइए अवधारणा को बेहतर ढंग से समझने के लिए कुछ उदाहरण देखें।
इस दूसरे क्रम के क्विनरिले में एक जावास्क्रिप्ट प्रोग्राम है जो पायथन प्रोग्राम को प्रिंट करता है, जो फिर मूल जावास्क्रिप्ट प्रोग्राम को प्रिंट करता है। यह आत्म-प्रतिकृति की एक गतिशील जोड़ी है।
जावास्क्रिप्ट → पायथन ⥀
जावास्क्रिप्ट: इसे ऑनलाइन आज़माएं!
console.log((q=_=>`print(${JSON.stringify(`console.log((q=${q []})())`)})`)())
पायथन: इसे ऑनलाइन आज़माएं!
print("console.log((q=_=>`print(${JSON.stringify(`console.log((q=${q []})())`)})`)())")
तीसरे क्रम के क्विन रिले के साथ चीजें और भी दिलचस्प हो जाती हैं। यह एक हास्केल प्रोग्राम से शुरू होता है, जो एक पायथन प्रोग्राम को आउटपुट करता है, जो एक रूबी प्रोग्राम को आउटपुट करता है, और अंत में, रूबी प्रोग्राम मूल हास्केल प्रोग्राम पर वापस आ जाता है।
हास्केल → Python2 → रूबी ⥀
हास्केल: इसे ऑनलाइन आज़माएं!
q a b c=putStrLn $ b [toEnum 10,'q','('] show b [','] show c [','] show a [')'] main=q "q a b c=putStrLn $ b [toEnum 10,'q','('] show b [','] show c [','] show a [')']" "def q(a,b,c):print b chr(10) 'q(' repr(b) ',' repr(c) ',' repr(a) ')'" "def e(x) return 34.chr x 34.chr end;def q(a,b,c) print b 10.chr 'main=q ' e(b) ' ' e(c) ' ' e(a) ' ' 10.chr end"
पायथन2: इसे ऑनलाइन आज़माएं!
def q(a,b,c):print b chr(10) 'q(' repr(b) ',' repr(c) ',' repr(a) ')' q("def q(a,b,c):print b chr(10) 'q(' repr(b) ',' repr(c) ',' repr(a) ')'","def e(x) return 34.chr x 34.chr end;def q(a,b,c) print b 10.chr 'main=q ' e(b) ' ' e(c) ' ' e(a) ' ' 10.chr end","q a b c=putStrLn $ b [toEnum 10,'q','('] show b [','] show c [','] show a [')']")
रूबी: इसे ऑनलाइन आज़माएं!
def e(x) return 34.chr x 34.chr end;def q(a,b,c) print b 10.chr 'main=q ' e(b) ' ' e(c) ' ' e(a) ' ' 10.chr end q("def e(x) return 34.chr x 34.chr end;def q(a,b,c) print b 10.chr 'main=q ' e(b) ' ' e(c) ' ' e(a) ' ' 10.chr end","q a b c=putStrLn $ b [toEnum 10,'q','('] show b [','] show c [','] show a [')']","def q(a,b,c):print b chr(10) 'q(' repr(b) ',' repr(c) ',' repr(a) ')'")
यहां चौथे क्रम का क्विन रिले है: रूबी → जावा → सी# → पायथन ⥀
गिटहब
सभी संस्कृतियों में, कई साझा प्रतीकवाद हैं। उनमें से एक ऑरोबोरोस है, जिसका मिस्र, ग्रीक, रोमन, हिंदू, साइबेरियाई, नॉर्स, अफ्रीकी और दक्षिण अमेरिकी पौराणिक कथाओं में संदर्भ है। ऑरोबोरोस एक प्राचीन प्रतीक है जिसमें एक सांप या ड्रैगन को अपनी ही पूंछ खाते हुए दिखाया गया है, जो सृजन और विनाश के शाश्वत चक्र का प्रतिनिधित्व करता है।
नॉर्स पौराणिक कथाओं में, जोर्मुंगंद्र एक विशाल नाग है, जो लोकी और विशाल अंगरबोडा की मध्य संतान है। ओडिन ने जोर्मुंगेंडर को मिडगार्ड (मनुष्यों का क्षेत्र) के आसपास के समुद्र में फेंक दिया, जहां सांप इतना बड़ा हो गया कि उसने दुनिया को घेर लिया और अपनी पूंछ पकड़ ली। मिडगार्ड (पृथ्वी) को घेरने के परिणामस्वरूप इसे विश्व सर्प - ऑरोबोरोस कहा जाता है। जोर्मुंगेंडर द्वारा अपनी पूँछ छोड़ना राग्नारोक (दुनिया की अंतिम लड़ाई) की शुरुआत के संकेतों में से एक है।
क्वाइन रिले इस प्रतीकवाद को काफी सफाई से प्रस्तुत करते हैं, क्योंकि चक्र में प्रत्येक कार्यक्रम अगले को जन्म देता है, केवल अंत में पुनर्जन्म होता है, और इसलिए उन्हें उपनाम दिया जाता है ऑरोबोरोस कार्यक्रम।
अपने सीट पर बैठे रहें। यहां 128वें क्रम का ऑरोबोरोस क्विन रिले है। हां, आपने उसे सही पढ़ा है। 128 !!!
रूबी → रस्ट → स्काला → ... (120 अन्य) ... → पायथन → आर → रैटफोर → आरसी → REXX ⥀
गिटहब
मानो यह पर्याप्त प्रभावशाली नहीं था, इसमें एक ईस्टर अंडा भी शामिल है। ज़ूम आउट करने पर मूल रूबी कोड में ऑरोबोरोस ड्रैगन होता है!
आइए पहले लिखे गए पायथन इंट्रॉन को शुरू करें और इसे दूसरे क्रम के क्विनरिले में बदलने का प्रयास करें।
पायथन इंट्रोन: इसे ऑनलाइन आज़माएं!
intron = 'wubbalubbadubdub' data = "print('intron =', repr(intron)); print('data =', repr(data)); print(data)" print('intron =', repr(intron)); print('data =', repr(data)); print(data)
इंट्रॉन के जादू का उपयोग करके, अब हम आसानी से एक अलग भाषा के सहोदर क्विन के कोड भाग को इंट्रॉन में डाल सकते हैं। फॉर्म का एक प्रोग्राम तैयार करना:
पायथन:
intron = "code part of sibling" data = "code part of self" print('intron =', repr(intron)); print('data =', repr(data)); print(data)
चूंकि, प्रत्येक चर एक अलग क्वाइन के डेटा के रूप में कार्य कर रहा है। आइए डेटा और इंट्रॉन का नाम बदलकर क्रमशः d1 और d2 कर दें।
पायथन:
d1 = "code part of self" d2 = "code part of sibling" print('d1 =', repr(d1)); print('d2 =', repr(d2)); print(d1)
अब, डी2 एक इंट्रॉन के रूप में कार्य करता है, लेकिन उपरोक्त प्रोग्राम ने अभी भी स्वयं के कोड भाग को प्रिंट करने का प्रयास किया है। इसे अगले का स्रोत प्रिंट करने के लिए, आइए अंत में print(d1) के बजाय print(d2) प्रिंट करें।
पायथन:
d1 = "code part of self" d2 = "code part of sibling" print('d1 =', repr(d1)); print('d2 =', repr(d2)); print(d2)
हम पहले से ही जानते हैं कि d1 की सामग्री केवल पंक्ति 3 की एक प्रति है। लेकिन हमारे पास अभी तक d2 की सामग्री नहीं है।
मान लीजिए, हम जावास्क्रिप्ट के साथ एक क्विनरिले बनाना चाहते थे। आइए JS में एक समान इंट्रॉन लिखें।
जावास्क्रिप्ट:
d1 = "code part of sibling" d2 = "code part of self" console.log(`d1 = ${JSON.stringify(d1)}`); console.log(`d2 = ${JSON.stringify(d2)}`); console.log(d1);
अब, उपरोक्त जेएस इंट्रोन की पंक्ति 3, उस सिबलिंग प्रोग्राम का कोड है जो हम चाहते थे!
एक दूसरे के कोड को दूसरे में इंट्रॉन के रूप में चिपकाएँ।
टिप्पणी। कुछ उद्धरण विसंगतियों से बचने के लिए हमें js में d1 '' जोड़ने की आवश्यकता है
पायथन: इसे ऑनलाइन आज़माएं!
d1 = "print('d1 =', repr(d1)); print('d2 =', repr(d2)); print(d2)" d2 = "console.log(`d1 = ${JSON.stringify(d1)}`); console.log(`d2 = ${JSON.stringify(d2)}`); console.log(d1 '');" print('d1 =', repr(d1)); print('d2 =', repr(d2)); print(d2)
जावास्क्रिप्ट: इसे ऑनलाइन आज़माएं!
d1 = "print('d1 =', repr(d1)); print('d2 =', repr(d2)); print(d2)" d2 = "console.log(`d1 = ${JSON.stringify(d1)}`); console.log(`d2 = ${JSON.stringify(d2)}`); console.log(d1 '');" console.log(`d1 = ${JSON.stringify(d1)}`); console.log(`d2 = ${JSON.stringify(d2)}`); console.log(d1 '');
तुम वहाँ जाओ। यह उचित दूसरे क्रम का क्विन रिले है! एक पायथन प्रोग्राम, जो एक जावास्क्रिप्ट प्रोग्राम को प्रिंट करता है, जो मूल पायथन प्रोग्राम को एक चक्र में वापस प्रिंट करता है।
QuineRelay बनाना रचनात्मक कोडिंग और यह समझने का एक अभ्यास है कि विभिन्न भाषाएं स्ट्रिंग्स का प्रतिनिधित्व और हेरफेर कैसे करती हैं। इसमें विभिन्न कार्यक्रमों से इंट्रॉन को एक साथ बुनना शामिल है, प्रत्येक में अपने अगले पड़ोसी को दोहराने के लिए कोड होता है।
इसके मूल में, nth-ऑर्डर रिले n प्रोग्रामिंग भाषाओं में उद्धरणों से बचने के लिए n चतुर तरीकों का एक खेल है।
मल्टीक्वाइन पर अगली पोस्ट के लिए बने रहें!
स्रोत और संदर्भ:
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3