"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > क्विनरिले: क्विन नागिन का जन्म

क्विनरिले: क्विन नागिन का जन्म

2024-08-28 को प्रकाशित
ब्राउज़ करें:796

क्विन ब्लॉग श्रृंखला के पिछले साहसिक कार्यों में, हमने पता लगाया कि अपनी खुद की क्वीन्स और इंट्रोन्स कैसे लिखें। आज हम देखेंगे कि क्विन रिले क्या हैं और आप उन्हें बनाने के लिए इंट्रोन्स का लाभ कैसे उठा सकते हैं।

कार्यक्रमों के एक समूह की कल्पना करें, प्रत्येक एक अलग भाषा में लिखा गया है। इस सर्कल में प्रत्येक प्रोग्राम का एक ही उद्देश्य होता है: अनुक्रम में अगले प्रोग्राम के स्रोत कोड को प्रिंट करना। अंतिम प्रोग्राम फिर पहले प्रोग्राम के स्रोत कोड को प्रिंट करके लूप को बंद कर देता है।

अनिवार्य रूप से, क्विन रिले 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) ')'")

चौथे क्रम का रिले

यहां चौथे क्रम का क्विन रिले है: रूबी → जावा → सी# → पायथन ⥀
गिटहब


सभी संस्कृतियों में, कई साझा प्रतीकवाद हैं। उनमें से एक ऑरोबोरोस है, जिसका मिस्र, ग्रीक, रोमन, हिंदू, साइबेरियाई, नॉर्स, अफ्रीकी और दक्षिण अमेरिकी पौराणिक कथाओं में संदर्भ है। ऑरोबोरोस एक प्राचीन प्रतीक है जिसमें एक सांप या ड्रैगन को अपनी ही पूंछ खाते हुए दिखाया गया है, जो सृजन और विनाश के शाश्वत चक्र का प्रतिनिधित्व करता है।

QuineRelay: Birth of the Quine serpent

नॉर्स पौराणिक कथाओं में, जोर्मुंगंद्र एक विशाल नाग है, जो लोकी और विशाल अंगरबोडा की मध्य संतान है। ओडिन ने जोर्मुंगेंडर को मिडगार्ड (मनुष्यों का क्षेत्र) के आसपास के समुद्र में फेंक दिया, जहां सांप इतना बड़ा हो गया कि उसने दुनिया को घेर लिया और अपनी पूंछ पकड़ ली। मिडगार्ड (पृथ्वी) को घेरने के परिणामस्वरूप इसे विश्व सर्प - ऑरोबोरोस कहा जाता है। जोर्मुंगेंडर द्वारा अपनी पूँछ छोड़ना राग्नारोक (दुनिया की अंतिम लड़ाई) की शुरुआत के संकेतों में से एक है।

क्वाइन रिले इस प्रतीकवाद को काफी सफाई से प्रस्तुत करते हैं, क्योंकि चक्र में प्रत्येक कार्यक्रम अगले को जन्म देता है, केवल अंत में पुनर्जन्म होता है, और इसलिए उन्हें उपनाम दिया जाता है ऑरोबोरोस कार्यक्रम।


128वें क्रम का ऑरोबोरोस रिले

अपने सीट पर बैठे रहें। यहां 128वें क्रम का ऑरोबोरोस क्विन रिले है। हां, आपने उसे सही पढ़ा है। 128 !!!
रूबी → रस्ट → स्काला → ... (120 अन्य) ... → पायथन → आर → रैटफोर → आरसी → REXX ⥀
गिटहब

QuineRelay: Birth of the Quine serpent

मानो यह पर्याप्त प्रभावशाली नहीं था, इसमें एक ईस्टर अंडा भी शामिल है। ज़ूम आउट करने पर मूल रूबी कोड में ऑरोबोरोस ड्रैगन होता है!

QuineRelay: Birth of the Quine serpent


अपना स्वयं का क्विन रिले लिखना

आइए पहले लिखे गए पायथन इंट्रॉन को शुरू करें और इसे दूसरे क्रम के क्विनरिले में बदलने का प्रयास करें।

पायथन इंट्रोन: इसे ऑनलाइन आज़माएं!

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 चतुर तरीकों का एक खेल है।

मल्टीक्वाइन पर अगली पोस्ट के लिए बने रहें!


स्रोत और संदर्भ:

  • ऑरोबोरोस कार्यक्रम, विकी पेज।
  • तीन भाषाओं में एक तीसरा ऑर्डर क्वीन, sigfpe द्वारा ब्लॉग।
  • इब्रागिमोव रुस्लान द्वारा चेन क्वीन, गिटहब रेपो।
  • 128 क्विन रिले, युसुके एंडोह द्वारा गिटहब रेपो।
  • क्विन रिले: क्विन सर्प का जन्म, स्व-संदर्भित ब्लॉग जहां प्रत्येक एन-ऑर्डर उदाहरण में एक शब्द चक्रीय रूप से अगले से हाइपरलिंक होता है। (dev.to में काम नहीं कर सकता; विहित ब्लॉग चेकआउट करें)
  • जोर्मुंगंद्र, विकी पेज।
  • ऑरोबोरोस, विकी पेज।
  • आर्ट ऑफ़ कोड, डायलन बीट्टी द्वारा वार्ता
विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/darshan-as/quinerelay-birth-of-the-quine-serpent-48be?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.com से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3