छद्म-क्वीन बहुभाषाविद भाषा-पहचान काउंटर


11

Quines मजेदार हैं। पॉलीग्लॉट भी मज़ेदार हैं। Polyglot Quines मौजूद हैं, लेकिन हम बार को और भी ऊंचा उठा सकते हैं।

ऐसी फ़ाइल लिखें जिसमें भाषाओं के लिए मान्य प्रोग्राम α, and, और a हो। जब फ़ाइल को भाषा α या the प्रोग्राम के रूप में (संभवतः इसे संकलित करने के बाद) निष्पादित किया जाता है, तो कार्यक्रम का आउटपुट इस प्रतियोगिता के लिए एक वैध प्रस्तुत करने के रूप में उसी रूप में होगा। यदि आपकी फ़ाइल को भाषा file प्रोग्राम के रूप में निष्पादित किया जाता है, तो यह एक नंबर आउटपुट करेगा। इस संख्या का मान द्विआधारी संख्या के रूप में व्याख्या किए गए कार्यक्रम के पिछले निष्पादन की श्रृंखला है।

यह स्पष्टीकरण अंडरस्टैंड करने के लिए थोड़ा कठिन हो सकता है, इसलिए यहां एक उदाहरण है। Let, Α, और Α ऐसे कार्य होने चाहिए जो उनके इनपुट को भाषा α, β, या। सम्मान के रूप में निष्पादित करते हैं। कार्यक्रम और इन कार्यक्रमों का उत्पादन वापस। बता दें कि x इस प्रतियोगिता के लिए एक वैध सबमिशन है। फिर निम्न अभिव्यक्ति, जहां हम भाषा के माध्यम से x प्रक्रिया करते हैं, α,, α, α,,, where , और γ इस क्रम में, ४१ १० = १०११००१ २ के बाद से ४१ होगा ।

Β (Β (Α (Α (Β (Β ( x ))))))

आप यह नहीं मान सकते हैं कि श्रृंखला में penultimate निष्पादन भाषा pen में एक निष्पादन है। उस स्थिति के लिए जहां आपके मूल सबमिशन को सीधे भाषा it प्रोग्राम के रूप में निष्पादित किया जाता है, यह 0 प्रिंट करेगा।

आपका कार्यक्रम श्रृंखला में सोलह संकलनों तक सही ढंग से व्यवहार करेगा; यह है कि, आपका प्रोग्राम सबसे अंत में प्रिंट आउट हो सकता है 2 15 - 1. बेशक, आपके प्रोग्राम को लंबी संकलन श्रृंखलाओं का समर्थन करने की अनुमति है।

यह रचनात्मक समाधान को प्रोत्साहित करने के लिए एक लोकप्रियता प्रतियोगिता है। उच्चतम वोट टैली जीत के साथ प्रस्तुत किया गया।


क्या तीन भाषाएं समान हो सकती हैं (भले ही यह काफी कम हो जाए)?
जर्ग्बेल

6
@Zgarb मैं एक समाधान देखना पसंद करूँगा जहाँ भाषाओं के कुछ (या सभी) बराबर हैं। आइए देखें कि आप समान भाषाओं को अलग करने का प्रबंधन कैसे करते हैं।
फ्यूजएक्सएक्सएल

1
...समझा। : DI ने चुनौती को बहुत जल्दबाजी में पढ़ा।
जर्ग्बेल

@Zgarb एक ही भाषा के विभिन्न संस्करणों के बारे में कैसे? magic += Number(System.env.lang_version[-1])
जॉन ड्वोरक

1
बोरिंग a,b,cया 1,2,3=) के बजाय ग्रीक अक्षरों का उपयोग करने के लिए +1
दोष

जवाबों:


13

अजगर 2, अजगर 3,> <> (मछली)

#;n0
import sys
x='\\\'\nn#;n0import sysx=v=int(1/2*2)sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])n'
v=int(1/2*2)
sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])

अजगर की व्याख्या

Python 2 और Python 3 दुभाषिए समान रूप से काम करते हैं सिवाय इसके कि v=int(1/2*2)वैरिएबल को अलग-अलग मान ( 0और 1) मिलते हैं क्योंकि Python 2 फ्लोट डिवीजन का उपयोग करता है और Python 3 पूर्णांक विभाजन का उपयोग करता है।

प्रत्येक रन में वे एक्सप्रेशन +0*2या +1*2 पहली पंक्ति (बाद में #;n) और xस्ट्रिंग (अंतिम लिखने की कमांड के बाद ) जोड़ते हैं । > <> दुभाषिया पहले जोड़ का उपयोग करता है और पायथन दूसरे का उपयोग सही खदान बनाने के लिए करता है।

के बाद कोड B(A(B(B(x)))):

#;n+1*2+0*2+1*2+1*20
import sys
x='\\\'\nn#;n0import sysx=v=int(1/2*2)sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])+1*2+0*2+1*2+1*2n'
v=int(1/2*2)
sys.stdout.write(x[4:7]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[7:8]),sys.stdout.write(x[2:3]),sys.stdout.write(x[8:18]),sys.stdout.write(x[2:3]),sys.stdout.write(x[18:20]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[0:1]),sys.stdout.write(x[1:2]),sys.stdout.write(x[0:1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[3:4]),sys.stdout.write(x[4:7]),sys.stdout.write(x[7:8]),sys.stdout.write(x[8:18]),sys.stdout.write(x[18:20]),sys.stdout.write(x[20:32]),sys.stdout.write(x[32:851]),sys.stdout.write(chr(43)+str(v)+chr(42)+chr(50)),sys.stdout.write(x[851:-1]),sys.stdout.write(x[3:4]),sys.stdout.write(x[1:2]),sys.stdout.write(x[2:3]),sys.stdout.write(x[20:32]),sys.stdout.write(x[2:3]),sys.stdout.write(x[32:851])

> <> (मछली) स्पष्टीकरण

जब आप> <> दुभाषिया चलाते हैं तो कोड पॉइंटर #पहली पंक्ति के चारों ओर के आवरण से वापस उछलता है और पहली पंक्ति के अंत से शुरू होता है और पश्चिम की ओर बढ़ते हुए स्टैक पर संख्याओं को धकेलना शुरू करता है। यदि कोई ऑपरेटर आता है ( +या *) यह स्टैक से शीर्ष दो तत्वों को पॉप करता है और परिणाम को वापस धकेलता है। इस पद्धति के साथ हम पिछले रनों के बेस 2 ( 13पूर्व उदाहरण में) का प्रतिनिधित्व करते हैं । यह वांछित संख्या है इसलिए हम इसे आउटपुट करते हैं nऔर इसके साथ समाप्त करते हैं ;


यह बहुत अच्छा है।
फ्यूजएक्सएक्सएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.