Polyglot के टुकड़े प्रिंट करें


22

आमतौर पर, पॉलीग्लॉट्स का निर्माण इस तरह से किया जाता है कि प्रत्येक भाषा उस कोड के कुछ हिस्सों को अनदेखा कर सकती है जो अन्य भाषाओं के लिए मौजूद हैं, उन्हें स्ट्रिंग सिग्नल्स में लपेटकर, टिप्पणी सिंटैक्स या अन्य समान ट्रिक्स का उपयोग करके।

आपका लक्ष्य एक पॉलीग्लॉट लिखना है जहां प्रत्येक भाषा के लिए आउटपुट उस आउटपुट को बनाने वाले पॉलीग्लॉट का कोड होता है। विशेष रूप से, आउटपुट को केवल हटाने के साथ पॉलीग्लॉट कोड से बनाया जाना चाहिए, और यह दी गई भाषा में एक क्वीन होना चाहिए।

नियम

  • केवल उचित quines की अनुमति है (स्रोत कोड को नहीं पढ़ना, कोई इनपुट नहीं लेना, अगर STDOUT एक विकल्प नहीं है, तो उत्पादन STDOUT या निकटतम विकल्प के लिए होना चाहिए, और कार्यक्रमों में केवल ऐसे शाब्दिक से अधिक होना चाहिए, जो स्पष्ट रूप से मुद्रित हैं)।
  • चूंकि विभिन्न भाषाएं अलग-अलग एन्कोडिंग का उपयोग कर सकती हैं, कच्ची बाइट्स यहां मायने रखती हैं। उदाहरण के लिए, भाषा एक UTF-8 का उपयोग करता है और भाषा बी CP437 उपयोग करता है, (हेक्स) कोड C3 88 46 47होगा ÈFGभाषा एक के लिए और ├êFGभाषा बी के लिए
  • सभी आउटपुट अलग-अलग होने चाहिए (फिर, कच्चे बाइट्स की तुलना करते हुए)। यह मामूली भाषा संस्करणों को प्रतिबंधित करने की कोशिशों के साथ जटिलताओं से बचा जाता है - यदि दो भाषाएं समान कार्य करने के लिए कोड के समान भाग का उपयोग करती हैं, तो आप दोनों का दावा नहीं कर सकते।
    • यदि आपके पास दो भाषाएँ A और B ऐसी हैं जो XYदोनों में एक मान्य आउटपुट है, लेकिन YZB में भी मान्य है, तो आप XYA YZके आउटपुट के रूप में और B के आउटपुट के रूप में चुन सकते हैं , इसलिए आप दोनों को अपने स्कोर में दावा कर सकते हैं ( लेकिन आप XYउपरोक्त नियम के कारण दोनों भाषाओं के लिए दावा नहीं कर सकते )।
  • सभी आउटपुट यथासंभव कम होने चाहिए। उदाहरण के लिए, यदि आपका कोड print('foo')#somethingपायथन 3 के लिए था (इस तथ्य को अनदेखा करते हुए कि आउटपुट सही नहीं है), तो आपको जिस कोड को आउटपुट करने की आवश्यकता होगी वह होगा print('foo')और print('foo')#इसकी अनुमति नहीं होगी। यदि समान (न्यूनतम) लंबाई के कई तार हैं जो सही आउटपुट का उत्पादन करते हैं, तो आप उनमें से किसी एक को चुन सकते हैं।
  • सबमिशन कम से कम 2 भाषाओं में पॉलीग्लॉट होना चाहिए।
  • आपका स्कोर द्वारा दिया जाएगा (number of programming languages with distinct outputs)**3/(total byte size of polyglot)। सबसे ज्यादा अंक जीते। इस घटना में कि दो प्रस्तुतियाँ एक ही स्कोर को प्राप्त करती हैं, जो सबमिशन उस स्कोर तक पहुँचती है वह पहले जीत जाएगी।

2
दूसरा अंतिम नियम लगता है जैसे हमें यह साबित करने की आवश्यकता है कि किसी भी संभावित विलोपन के किसी भी अन्य परिणाम के द्वारा परिणामी क्वीन को गोल्फ के लिए असंभव है। क्या वह जानबूझकर है?
मार्टिन एंडर


आप उस भाषा के मामले में "विलोपन" को कैसे परिभाषित करते हैं जिसकी आज्ञा 8 बिट लंबी नहीं है? क्या आप एक समय में स्रोत से एक कमांड, या एक बार एक बाइट हटाते हैं?

@MartinEnder अच्छा विश्वास ग्रहण किया जा सकता है। जब तक किसी को छोटी क्वीन न मिल जाए, जिसे पॉलीग्लॉट से बनाया जा सकता है, उत्तर को वैध माना जाता है।
मेघो

@ ais523 सब कुछ बाइट स्तर पर किया जाता है।
मेघो

जवाबों:


11

GolfScript + CJam + विखंडन 2 + जेली , 4 भाषाओं, 24 बाइट्स, स्कोर 2.667

हेक्स डंप के साथ शुरू करते हैं:

00000000:  3322 3024 700a 2721 2b4f 5222 0a3c 3024 700a 6523 7fff cccc

GolfScript, CJam और Fission 2 के लिए, हम कुछ ASCII- संगत सिंगल-बाइट एन्कोडिंग जैसे ISO 8859-1 (सटीक एन्कोडिंग वास्तव में कोई फर्क नहीं पड़ता, क्योंकि व्याख्या केवल ASCII वर्णों के लिए ऑपरेटर को परिभाषित करते हैं):

3"0$p
'!+OR"
<0$p
e#<DEL>ÿÌÌ

<DEL>नियंत्रण चरित्र कहां है 0x7f

जेली में, इसे जेली के अपने कोड पृष्ठ में माना जाता है, जहां यह इसके बजाय इस तरह दिखता है:

3"0$p½'!+OR"½<0$p½e#¶”ṘṘ

GolfScript

eअंतिम पंक्ति पर एक अज्ञात चर और है #, लाइन के शेष के बाहर टिप्पणी तो यह प्रिंट

"0$p"
0$p

साथ पीछे linefeed। यह मानक क्वीन का गोल्फस्क्रिप्ट / सीजाम पॉलीग्लॉट संस्करण है:

".p"
.p

बहुवचन का प्रयास करें। | रानी की कोशिश करो।

CJam

यहां, e#अंतिम पंक्ति को टिप्पणी करता है, इसलिए लगभग समान रूप से, यह प्रिंट करता है

"0$p"
0$p

एक अनुगामी लाइनफीड के बिना

पॉलीग्लोट का प्रयास करें | रानी की कोशिश करो।

विखंडन

विखंडन केवल दूसरी पंक्ति को देखता है जो मानक विखंडन है, इसलिए यह प्रिंट करता है

'!+OR"

मैं यहाँ पॉलीग्लॉट के लिए एक ऑनलाइन लिंक प्रदान नहीं कर सकता, क्योंकि TIO फ़ाइल को UTF-8 के रूप में विखंडन को भेजता है, लेकिन विखंडन स्रोत बाइट को बाइट द्वारा पढ़ता है, जो अंतिम पंक्ति को बहुत लंबा बनाता है। हालाँकि, मैंने इसे ISO 8859-1 एन्कोडेड फ़ाइल के साथ स्थानीय रूप से परीक्षण किया है (जिसमें अंतिम पंक्ति की लंबाई दूसरी है), यह पुष्टि करने के लिए कि यह काम करता है।

रानी की कोशिश करो।

जेली

पाइलो जेली में लाइनफीड्स के लिए एक उपनाम है, इसलिए स्रोत इसके बराबर है:

3"0$p½'!+OR"½<0$p½e#
”ṘṘ

सभी लेकिन एक जेली कार्यक्रम की अंतिम पंक्ति "सहायक लिंक" (यानी फ़ंक्शंस) हैं, जिन्हें तब तक अनदेखा किया जा सकता है जब तक कि उन्हें कॉल न किया जाए, बशर्ते कि वे वाक्यविन्यास रूप से मान्य हों। यह वास्तव में 3CJam और GolfScript कार्यक्रमों में पहला कारण है , क्योंकि अन्यथा "जेली में पार्स नहीं किया जा सकता है।

अन्यथा, चूंकि फ़ंक्शन को नहीं बुलाया जाता है, प्रोग्राम केवल इसकी दूसरी पंक्ति के बराबर है, जो मानक जेली क्वीन है।

बहुवचन का प्रयास करें। | रानी की कोशिश करो।


9

> <> + पायथन, 2 भाषाएँ, 51 46 बाइट्स, स्कोर ~ = 0.16 0.17

चूंकि अभी तक कोई जवाब नहीं है, इसलिए मैं एक साधारण से शुरुआत करूंगा

#.09;!?lo}*2+2f"
_='_=%r;print _%%_';print _%_

इसके लिए प्रयास करें > <> और पायथन

के लिए> <> पहली पंक्ति एक क्वीन है (# प्रतिबिंबित करता है, "पूरी लाइन को स्टैक पर रखता है, फिर हम 34 को धक्का देते हैं (" के लिए चारकोड) और सब कुछ प्रिंट करें), निष्पादन कभी भी इससे नहीं हटता है, इसलिए यह प्रभावी रूप से बाकी हिस्सों को अनदेखा करता है " कोड।

पायथन के लिए पहली पंक्ति एक टिप्पणी है, जबकि दूसरा एक क्वीन है (अजगर में मानक दृष्टिकोण, दोनों तर्कों के समान स्ट्रिंग के साथ स्ट्रिंग प्रतिस्थापन का उपयोग करके)।


1
> <> उत्तर पर थोड़ा सा अनुकूलन आपको कुछ बाइट्स बचा सकता है: - # "~ r10gol?
Teal pelican

@ Tealpelican मुझे का उपयोग याद दिलाने के लिए धन्यवाद .! मैंने इस दृष्टिकोण का उपयोग करके अपनी क्वीन को अनुकूलित किया, हालांकि मैं स्ट्रिंग को रिवर्स में रखना पसंद करता हूं (क्योंकि यह बाइट्स बचाता है) और उपयोग करने से बचने के लिए g(क्योंकि इसे "स्रोत कोड को पढ़ने" के रूप में व्याख्या की जा सकती है)
लियो

यह जी का उपयोग नहीं करने के लिए एक बहुत ही उचित बिंदु है। एक नज़र और इसके बारे में थोड़ा सोचने के बाद, आप इसे अपने "लाइक; # .09;?; लो} -1"
चैले पेलिकन

7

JavaScript + Python 2 + Japt, 3 भाषाएँ, 132 बाइट्स, स्कोर ~ = 0.205

A="`i96d)p2`i96d)p2";1//2;A=1
S="S=%s;console.log(S,uneval(S))";A//2;S="S=%r;print S%%S";"""
console.log(S,uneval(S))//""";print S%S

यह प्रिंट करता है

S="S=%s;console.log(S,uneval(S))";console.log(S,uneval(S))

जावास्क्रिप्ट में (केवल फ़ायरफ़ॉक्स में),

S='S=%r;print S%%S';print S%S

पायथन 2 में, और

`i96d)p2`i96d)p2

जाप में। ( इसे ऑनलाइन टेस्ट करें! )

जावास्क्रिप्ट

यह वही है जो जावास्क्रिप्ट देखता है:

A="`i96d)p2`i96d)p2";1
S="S=%s;console.log(S,uneval(S))";A
console.log(S,uneval(S))

पहली पंक्ति एक नो-ऑप है क्योंकि Aकिसी भी तरह से इसका उपयोग नहीं किया जाता है। दूसरी पंक्ति Sस्ट्रिंग पर सेट होती है S=%s;console.log(S,uneval(S)), और तीसरी बार (केवल उद्धरणों में लिपटे) %sके unevalएड प्रतिनिधित्व के साथ इसे प्रिंट करता है । परिणाम जावास्क्रिप्ट में एक क्वीन है।SS

अजगर

यह मूल रूप से अजगर क्या देखता है:

A="`i96d)p2`i96d)p2";1//2;A=1
S="S=%s;console.log(S,uneval(S))";A//2;S="S=%r;print S%%S"
print S%S

पहली पंक्ति बहुत ज्यादा है एक सेशन नहीं; एकमात्र महत्वपूर्ण हिस्सा A=1अंत में है। यह Aएक संख्या में बदल जाता है ताकि A//2दूसरी पंक्ति पर पूर्णांक विभाजन एक त्रुटि न फेंके।

दूसरी पंक्ति ज्यादातर उसी तरह से है, सिवाय इसके Sकि वह स्ट्रिंग पर सेट है S=%r;print S%%S। तीसरी पंक्ति के प्रिंट को कच्चे प्रतिनिधित्व के साथ Sबदलने के बाद (केवल सिंगल-कोट्स में लपेटा जाता है)। परिणाम अजगर 2 में एक रानी है।%rSS

Japt

यह जावास्क्रिप्ट कोड जप दुभाषिया देखता है:

A="`i96d)p2`i96d)p2";1//2;A=1
S="S=%s;console.log(S,uneval(S))";A//2;S="S=%r;print S%%S";"","\nconsole.log(S,uneval(S))//","";.p("r".i("n".t(),S%S))

जैसा कि आप देख सकते हैं, यह ज्यादातर जावास्क्रिप्ट उत्तर के समान है, एक मुख्य अपवाद के साथ: अंतिम दो लाइनें संयुक्त हैं। नतीजतन, यह वही है जो दुभाषिया वास्तव में देखता है:

A="`i96d)p2`i96d)p2";1
S="S=%s;console.log(S,uneval(S))";A

पहली लाइन Aजाप क्वीन के लिए सेट है, और दूसरी सेट Sजेएस क्वीन के हिस्से के लिए। हालांकि, जाप में, केवल अंतिम अभिव्यक्ति आउटपुट पर भेजी जाती है; यह है A, इसलिए आउटपुट है `i96d)p2`i96d)p2


क्या है uneval? मेरे लिए काम नहीं करता
Cyoce

@Cyoce developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… यह केवल फ़ायरफ़ॉक्स में काम करता है।
ETHproductions

3

जोल्फ +> <>, स्कोर = 2 ** 3/15 = 0.533 ...।

"r0:g>o<
"Q«Q«

इसमें एक और भाषा जोड़ने पर काम हो रहा है।


2

> <>, पायथन 2 और 3, 3 भाषाएं, 107 बाइट्स, स्कोर = 27/107 ~ = 0.252

#o<}-1:"
a=1/1is 1;b="(_%(_,b))"[a:-a|9];_='a=1/1is 1;b="(_%%(_,b))"[a:-a|9];_=%r;print %s';print (_%(_,b))

इसे ऑनलाइन आज़माएं: पायथन 2 , पायथन 3 , > <>

पायथन 3 का आउटपुट दूसरी पंक्ति है, और पायथन 2 आउटपुट यह क्वीन है । > <> आउटपुट पहली पंक्ति है।

व्याख्या

यह कार्यक्रम क्लासिक पायथन 2 क्वीन से आधारित है:

_='_=%r;print _%%_';print _%_

सबसे पहले, इसे पायथन 2 और पायथन 3 दोनों के साथ संगत बनाने के लिए, मैंने printस्टेटमेंट को एक फ़ंक्शन कॉल में बदल दिया , और एक अतिरिक्त स्थान जोड़ा, जो बाद में काम आएगा:

_='_=%r;print (_%%_)';print (_%_)

इसके बाद, मुझे पायथन 2 को पायथन से अलग करने का एक तरीका चाहिए। 3. सबसे सरल तरीकों में से एक इस तथ्य का लाभ उठाना है कि /अजगर 2 में पूर्णांक विभाजन है, लेकिन पायथन 3 में फ्लोट डिवीजन है। इस प्रकार, निम्नलिखित कोड Trueपायथन से संबंधित है। 2, लेकिन Falseपायथन 3 में:

1/1is 1

दो भाषाओं के बीच आउटपुट को अलग-अलग बनाने के लिए, मुझे printकॉल में पहली और आखिरी कोष्ठक को चुनिंदा रूप से हटाने की आवश्यकता थी (इसीलिए मुझे पहले स्थान की आवश्यकता थी - कोई स्थान नहीं होने के कारण, यह printपायथन 2 में एक मान्य कथन नहीं होगा ) । इस प्रकार, मुझे क्वीन हार्नेस को संशोधित करने की आवश्यकता थी जैसे:

a=1/1is 1;b="(_%(_,b))"[a:-a|9];_='a=1/1is 1;b="(_%%(_,b))"[a:-a|9];_=%r;print %s';print (_%(_,b))

यही कारण है कि अभिव्यक्ति a:-a|9के लिए मूल्यांकन करता 0:9अजगर 2 में और 1:-1अजगर 3. में इस प्रकार, bहै "(_%(_,b))"अजगर 3 में, लेकिन अजगर 2 में पहली और आखिरी पात्रों छोड़ दिए जाते हैं, छोड़ने _%(_,b)। और उस संशोधन के साथ, बहुविवाह इस चुनौती के लिए मान्य था।

जैसा कि चैती पेलिकन द्वारा सुझाया गया है,> <> क्वीन #o<}-1:"को काफी आसानी से जोड़ा जा सकता है, इस तथ्य के लिए धन्यवाद कि #पायथन में एक एकल-पंक्ति टिप्पणी शुरू होती है। सीधे शब्दों में इसे और एक नई पंक्ति एक और भाषा जोड़ता है और स्कोर को लगभग दस गुना बढ़ा देता है।


1

पायथन 2 + रेटिना, 2 भाषाएँ, 55 बाइट्स, स्कोर = 2 ^ 3/55 14 0.145

मैंने उन दोनों को मान्य ASCII रखने के $nबजाय उपयोग किया

S='S=%r;print S%%S';print S%S#|
#$n\(*S1`$n\(*S1`
#\`#

पायथन , रेटिना

अजगर:

S='S=%r;print S%%S';print S%S

रेटिना:


\(*S1`
\(*S1`

0

> <> + पायके + पायथन 2, 81 बाइट्स, स्कोर = 3 ** 3/81 ~ 0.333

"""r00gol?!;60.
a=%r;print a%%a"""#);"34.Cp\D\Es"DEp00/
a=__doc__[-15:]
print a%a

मैंने सभी भाषाओं के साथ कुछ अलग करने की कोशिश की है।

> <> देखता है:

"""r00gol?!;60.

यह मानक का मामूली संशोधन है> <> शुरुआत में एक ट्रिपल उद्धृत स्ट्रिंग का उपयोग करने के लिए। यह पायथन के लिए एक अलग लाइन पर समाप्त होने वाले ट्रिपल कोट्स की अनुमति देता है।

इसे ऑनलाइन आज़माएं!

पायके देखता है:

"34.Cp\D\Es"DEp00/

मैंने पहले पक्के में एक क्वीन नहीं बनाई थी और इस तरह एक के बारे में सोचना था। मैंने एक स्ट्रिंग बनाने के लिए पारंपरिक क्वीनिंग तकनीकों का उपयोग किया और फिर इसे इनपुट के रूप में अपने साथ विकसित किया। दृश्य प्रभाव के बिना काम करने के लिए इस पर ध्यान दें, चेतावनियों को अक्षम करना होगा। जनरेशन स्टेप में 0 डिविजन द्वारा एक त्रुटि के साथ त्रुटियां।

यहाँ कोशिश करो! या सिर्फ रानी भाग।

अजगर देखता है:

यह सब। पाइथन अपनी क्वीन का उत्पादन करने के लिए सभी कोड का उपयोग करता है। मैंने डॉकस्ट्रिंग में क्वीन के हिस्से को एम्बेड करने का फैसला किया (हालांकि अंततः इसे हटाने के लिए बाइट्स बचाएंगे, लेकिन मुझे लगता है कि यह अच्छा है)। यह मानक क्विनिंग तकनीक का एक संशोधन है।

इसे ऑनलाइन आज़माएं!

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