एक Polyquine लिखें


33

एक पॉलीक्वाइन, क्वीन और पॉलीग्लॉट दोनों है। 1 आपको एक क्वीन लिखना है जो कम से कम दो अलग-अलग भाषाओं में मान्य है। यह कोड गोल्फ है, इसलिए सबसे छोटा उत्तर (बाइट्स में) जीतता है।

1 मैंने उसे बनाया। या यों कहें, जियोबिट्स ने किया । जाहिरा तौर पर, वह पहले वाला नहीं था , हालांकि।

नियम के लिए नियम

केवल सच quines स्वीकार कर रहे हैं। यही है, आपको पूरे स्रोत कोड को शब्दशः प्रिंट करने की आवश्यकता है, बिना :

  • अपने स्रोत कोड को पढ़ना, प्रत्यक्ष या अप्रत्यक्ष रूप से।
  • एक REPL वातावरण पर निर्भर है जो सिर्फ मूल्यांकन करता है और आपके द्वारा खिलाए गए प्रत्येक अभिव्यक्ति को प्रिंट करता है।
  • भाषा की विशेषताओं पर भरोसा करना जो केवल कुछ मामलों में स्रोत का प्रिंट आउट करते हैं।
  • त्रुटि संदेश या STDERR का उपयोग करके सभी या क्वीन का हिस्सा लिखें। (आप STDERR को चीजें लिख सकते हैं या चेतावनी / गैर-घातक त्रुटियां उत्पन्न कर सकते हैं जब तक कि STDOUT एक वैध क्वीन है और त्रुटि संदेश इसका हिस्सा नहीं हैं।)

इसके अलावा, आपके कोड में एक स्ट्रिंग शाब्दिक शामिल होना चाहिए

Polyglots के लिए नियम

उपयोग की जाने वाली दो भाषाएँ अलग-अलग होनी चाहिए। विशेष रूप से:

  • वे एक ही भाषा के अलग-अलग संस्करण नहीं होने चाहिए (जैसे कि पायथन 2 बनाम पायथन 3)।
  • वे एक ही भाषा (जैसे पास्कल बनाम डेल्फी) की अलग-अलग बोलियाँ नहीं होनी चाहिए।
  • एक भाषा अन्य एक का उपसमूह नहीं हो सकती है (जैसे C बनाम C ++)।

4
"आपके कोड में एक स्ट्रिंग शाब्दिक होना चाहिए " यहां तक ​​कि उन भाषाओं में भी जिनके पास कोई स्ट्रिंग शाब्दिक नहीं है, जैसे कि ब्रेनफक?
पीटर ओल्सन

@PeterOlson नियम का उद्देश्य गोल्फिंग-विशिष्ट भाषाओं (जैसे यह एक ) में कुछ खामियों से बचना है । जैसा कि मैं अनुमान नहीं लगा सकता कि नियम को हटाने या कमजोर करने के कारण क्या होगा (और जब तक मैं नियमों को बदलने का प्रशंसक नहीं हूं, जब तक कि बिल्कुल आवश्यक न हो), मुझे खेद है, लेकिन BF प्रस्तुतियाँ इस उद्देश्य के लिए मान्य नहीं होंगी चुनौती। यदि यह किसी भी सांत्वना है, तो BF प्रस्तुत करने की संभावना वैसे भी प्रतिस्पर्धी नहीं होगी। ;)
मार्टिन एंडर

1
"वह पहले वाला भी नहीं था" लिंक कहाँ से?
आउटगॉल्फ को एरिक करें

2
C वास्तव में C ++ का सबसेट नहीं है।
एमडी एक्सएफ

क्या दो अलग-अलग ब्रेनफ ** k- आधारित भाषाओं को एक ही भाषा के रूप में गिना जाता है, जैसे कि Brainf ** k और MOO?
एमडी एक्सएफ

जवाबों:


14

सीजेएम / गोल्फस्क्रिप्ट, 34 बाइट्स

{"__X.0#@@?LL
;~"N}__X.0#@@?LL
;~

बाइट काउंट में एक अनुगामी लाइनफीड शामिल है, क्योंकि कार्यक्रम इसके बिना एक क्वीन नहीं होगा।

जबकि CJam और GolfScript कुछ पहलुओं में बहुत समान हैं, बहुत सारे हैं सारे अंतर हैं। इसे "ईमानदार" पॉलीक्वीन बनाने के लिए, मैंने जितना संभव हो मतभेदों पर भरोसा करने का फैसला किया । ब्लॉक और स्ट्रिंग सिंटैक्स को छोड़कर (जो भाषाएं ओह के साथ कई अन्य लोगों को साझा करती हैं), कोड का कोई भी हिस्सा दोनों भाषाओं में बिल्कुल समान नहीं होता है।

ऑनलाइन गोल्फस्क्रिप्ट दुभाषिया में एक बग है; यह कार्यक्रम केवल आधिकारिक दुभाषिया के साथ काम करता है।

उदाहरण चलाते हैं

$ cat polyquine
{"__X.0#@@?LL
;~"N}__X.0#@@?LL
;~
$ md5sum polyquine <(cjam polyquine) <(golfscript polyquine)
e2f1f3cd68abbbceec58080513f98d9a  polyquine
e2f1f3cd68abbbceec58080513f98d9a  /dev/fd/63
e2f1f3cd68abbbceec58080513f98d9a  /dev/fd/62

यह कैसे काम करता है (CJam)

" Push that block.                                                                        ";

{"__X.0#@@?LL
;~"N}

" Push two copies of the block, 1 (computed as 1**0) and rotate the block copies on top.  ";

__X.0#@@

" If 1 is truthy (oh, the uncertainty), execute the first copy; else, execute the second.
  Evaluating the block pushes the string it contains; N pushes a linefeed.                ";

?

" Push two empty arrays.                                                                  ";

LL

" Discard one empty array and dump the second.                                            ";

;~

" (implicit) Print all items on the stack.                                                ";

यह कैसे काम करता है (गोल्फस्क्रिप्ट)

# Push that block.

{"__X.0#@@?LL
;~"N}

# Push a copy of the block; _ and X are noops, # initiates an inline comment.

__X.0#@@?LL

# Discard the 0 and execute the copy of the block.
# Evaluating the block pushes the string it contains; N is a noop.

;~

# (implicit) Print all items on the stack, followed by a linefeed.

सीजेम / गोल्फस्क्रिप्ट, 12 बाइट्स

{"0$~"N}0$~

जितना संभव हो उतना भाषाओं के मतभेदों से बचा जाता है।

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

यह कैसे काम करता है (CJam)

 "0$~"       " Push that string.                                                          ";
      N      " Push a linefeed.                                                           ";
{      }0$~  " Push a copy of the block and execute it.                                   ";
             " (implicit) Print the stack.                                                ";

यह कैसे काम करता है (गोल्फस्क्रिप्ट)

 "0$~"       # Push that string.
      N      # Undefined token (noop).
{      }0$~  # Push a copy of the block and execute it.
             # (implicit) Print the stack, followed by a linefeed.

14

सी # / जावा, 746 बाइट्स

मैं उस संपत्ति का उपयोग करता हूं जिसे जावा में चार्ट समान यूनिकोड अनुक्रमों के रूप में लिखा जा सकता है। यदि हमारे पास AC # संकलक के Bलिए निर्देश और जावा के लिए निर्देश है, तो हम निम्नलिखित कोड टुकड़ा का उपयोग कर सकते हैं:

//\u000A\u002F\u002A
A//\u002A\u002FB

यह C # के साथ निम्नलिखित तरीके से "मान्यता प्राप्त" होगा:

//\u000A\u002F\u002A
A//\u002A\u002FB

और जावा द्वारा निम्नलिखित तरीके से:

//
/*
A//*/B

क्योंकि \u000Aलाइन ब्रेक है, जावा में \u002Fहै /और \u002Aहै *

तो अंतिम बहुभुज-क्वीन है:

//\u000A\u002F\u002A
using System;//\u002A\u002F
class Program{public static void//\u000A\u002F\u002A
Main//\u002A\u002Fmain
(String[]z){String s="//@#'^using System;//'#^class Program{public static void//@#'^Main//'#main^(String[]z){String s=!$!,t=s;int[]a=new int[]{33,94,38,64,35,39,36};String[]b=new String[]{!&!!,!&n!,!&&!,!&@!,!&#!,!&'!,s};for(int i=0;i<7;i++)t=t.//@#'^Replace//'#replace^(!!+(char)a[i],b[i]);//@#'^Console.Write//'#System.out.printf^(t);}}",t=s;int[]a=new int[]{33,94,38,64,35,39,36};String[]b=new String[]{"\"","\n","\\","\\u000A","\\u002F","\\u002A",s};for(int i=0;i<7;i++)t=t.//\u000A\u002F\u002A
Replace//\u002A\u002Freplace
(""+(char)a[i],b[i]);//\u000A\u002F\u002A
Console.Write//\u002A\u002FSystem.out.printf
(t);}}

हालाँकि, भाषाओं की क्रियाशीलता के कारण आकार बहुत बड़ा है।

संकलन ideone.com पर उपलब्ध है: C # , जावा


3
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ समुदाय में आपका स्वागत है!
आउटगॉल्फ

2
मुझे पता है कि लगभग दो साल हो गए हैं, लेकिन आप 58 बाइट्स में गोल्फ खेल सकते हैं। यह ऑनलाइन जावा का प्रयास करें। और इसे ऑनलाइन C # .NET आज़माएं।
केविन क्रूज़सेन

क्या आपका मतलब 688 बाइट्स से है?
इवान कोचूरिन

13

पायथन 3 और जावास्क्रिप्ट, 134 बाइट्स

यहाँ मेरा (अंतिम?) प्रयास है:

a='eval(a.split(" ")[2%-4]),1//2# q=String.fromCharCode(39);console.log("a="+q+a+q+a.slice(-8)) print(a[-12:]%a) a=%r;eval(a)';eval(a)

यह शायद थोड़ा अधिक गोल्फ हो सकता है, खासकर अगर किसी को जावास्क्रिप्ट में एकल उद्धरण प्राप्त करने का एक बेहतर तरीका पता है।


उबला हुआ, कार्यक्रम इस तरह दिखता है:

a='a long string';eval(a)

eval()समारोह दोनों भाषाओं में भाव का मूल्यांकन करेंगे। तो लंबी स्ट्रिंग निष्पादित हो जाती है:

eval(a.split(" ")[2%-4]),1//2# ... the rest gets commented out

यह रिक्त स्थान द्वारा लंबी स्ट्रिंग को विभाजित करता है और इसके द्वारा प्रतिस्थापित सबस्ट्रिंग का मूल्यांकन करता है 2%-4। जावास्क्रिप्ट तीसरा सबस्ट्रिंग ( 2 % -4 == 2) और पायथन को दूसरे आखिरी ( 2 % -4 == -2) में चलाएगा , क्योंकि उनके मॉडुलो ऑपरेटर नकारात्मक के लिए अलग तरह से व्यवहार करते हैं।

बाकी स्ट्रिंग को दोनों भाषाओं में नजरअंदाज कर दिया जाता है। जावास्क्रिप्ट में रुक जाता है //, जबकि पायथन इसे पूर्णांक विभाजन के रूप में देखता है और पर रुक जाता है #

तो जावास्क्रिप्ट यहाँ कंसोल के लिए स्रोत कोड प्रिंट करता है:

q=String.fromCharCode(39);console.log("a="+q+a+q+a.slice(-8))

और यहाँ अजगर:

print(a[-12:]%a)

दोनों स्ट्रिंग के अंतिम भाग का उपयोग करते हैं, जो प्रोग्राम का एक टेम्प्लेट है:

a=%r;eval(a)

+1 ने इसे 140 बाइट्स तक पहुंचा दिया a='print(a[78:]%a)1q=String.fromCharCode(39);console.log("a="+q+a+q+a.slice(82))1a=%r;eval(a.split(1)[0|0=="0"])';eval(a.split(1)[0|0=="0"]):। जावास्क्रिप्ट में परीक्षण किया गया लेकिन अजगर में नहीं ... लेकिन यह काम करना चाहिए।
1

@soktinpk धन्यवाद, लेकिन मुझे नहीं लगता कि पायथन अनुमति देगा a.split(1)
grc

1
-8 बाइट्स:q=unescape("%27")
पैट्रिक रॉबर्ट्स

8

रूबी / पर्ल / पीएचपी, ५२

$b='$b=%c%s%c;printf$b,39,$b,39;';printf$b,39,$b,39;

से शब्दशः प्रतिलिपि बनाई गई क्रिस्टोफर ड्यूर के पर्ल Quine।

यह नियम का दुरुपयोग है। रूबी और पर्ल निश्चित रूप से एक ही भाषा नहीं हैं, और न ही पर्ल, रूबी का सबसेट है (ज्यादातर लिंक किए गए पर्ल क्वाइन रूबी में काम नहीं करते हैं, उदाहरण के लिए)। लेकिन रूबी को डिज़ाइन किया गया था कि यदि आप चाहते हैं तो पर्ल की तरह बहुत कुछ देखने में सक्षम हो सकता है और गोल्फिंग के दौरान यह बहुत कुछ होता है।


क्या यह पीएचपी में भी काम कर सकता है (या पहले से ही है)? यदि मैं डॉक्टर को सही ढंग से पढ़ रहा हूं, तो आप इसे कमांड लाइन पर चला सकते हैं -Rऔर आपको स्क्रिप्ट टैग की आवश्यकता नहीं है। php.net/manual/en/features.commandline.options.php
hmatt1

मैं इसे नियम का दुरुपयोग नहीं कहूंगा। दो भाषाओं के एक चौराहे पर काम करने वाली एक रानी का पता लगाना निश्चित रूप से इस सवाल का सामना करने का एक वैध तरीका है। हालाँकि, यह देखना आपका अपना काम नहीं है, अगर आप इसे सामुदायिक विकि के रूप में चिह्नित करते हैं तो मैं इसे पसंद करूंगा।
मार्टिन एंडर

@chilemagic वास्तव में ऐसा करता है!
histocrat

@ मार्टिनबटनर ने किया।
histocrat

6

बैश / गोल्फस्क्रिप्ट, 73

.~0 () 
{ 
    declare "-f" @* ".~0" " () 
"+@n.;
    echo '.~0;'
}
.~0;

पहले 3 पंक्तियों में से प्रत्येक पर एक अनुगामी स्थान है।

बैश / गोल्फस्क्रिप्ट, 78

alias :a~a.='eval "alias :a~a."\
;set [61 39]+a[39]+n"":a;echo ":a~a."'
:a~a.

5

PHP / पर्ल - 171

#<?PHP$s=1;$t="";
$a='%s<%cPHP$s=1;$t="";%c$a=%c%s%c;$t==$s?$t="#":$s;printf($a,$t,63,10,39,$a,39,10,63);%c#%c>';$t==$s?$t="#":$s;printf($a,$t,63,10,39,$a,39,10,63);
#?>

साथ दौड़ो:

$ php quine.pl
$ perl quine.pl

phpकोड वास्तव में चल रहा है (बस अपने आप मुद्रण नहीं)।


5

बैश / रूबी, 104 82

"tee`#";puts <<a*2+'a'#`" -<<'a';echo a
"tee`#";puts <<a*2+'a'#`" -<<'a';echo a
a

पुराना संस्करण:

"alias" "puts=f()(tee -;echo a);f"
puts <<a *2+"a"
"alias" "puts=f()(tee -;echo a);f"
puts <<a *2+"a"
a

बैश / रूबी, 128 अपरिभाषित व्यवहार के बिना

"alias" 'puts=f()(a=`cat`;echo "$a
$a
a");f'
puts <<'a' *2+"a"
"alias" 'puts=f()(a=`cat`;echo "$a
$a
a");f'
puts <<'a' *2+"a"
a

वाह, मुझे यह भी समझ नहीं आ रहा है कि रूबी कोड कैसे काम करता है:
मार्टिन एंडर

@ <<aRuby में मार्टिनबटनर बैश की तरह काम करता है, लेकिन एक स्ट्रिंग लौटाता है। मैंने पहले एक रूबी कार्यक्रम नहीं लिखा था। मुझे इस सुविधा के साथ एक यादृच्छिक भाषा मिली।
jimmy23013

मैं नहीं जानता कि यह कैसे या तो बाश में काम करता है: पी
मार्टिन एंडर 19

@ मार्टिनबटनर इसे हेरेडोक कहा जाता है। <<wordसिंगल के साथ लाइन द्वारा बंद स्ट्रिंग लौटाता है word
jimmy23013 19

5

रेटिक्युलर / बीफुंज -98, 28 बाइट्स [नॉनकमेटिंग]

<@,+1!',k- ';';Oc'43'q@$;!0"

जालीदार कोशिश करो! 98 की कोशिश करो!

;Befunge में s के बीच की किसी भी चीज़ को अनदेखा कर दिया जाता है, और जालीदार के लिए s के !बीच के खंड में छोड़ दिया जाता है ;। इस प्रकार, जालीदार देखता है:

<@,+1!',k- ';';Oc'43'q@$;!0"
<                             move left
                           "  capture string
                          0   push zero
                        ;!    skip `;` (end program)
                       $      drop zero
                     q@       reverse TOS
                 '43'         push 34 (")
                c             convert to char
               O              output all
              ;               end program

Befunge देखता है:

<@,+1!',k- ';';Oc'43'q@$;!0"
<                            move left
                           " capture string
                         !0  push 1
              ;         ;    skip this
         - ';'               push 27
       ,k                    output top 27 chars
   +1!'                      push 34 (")
  ,                          output "
 @                           end program

4

रूबी / गणितज्ञ, 225 बाइट्स

यहाँ मेरी अपनी बहुत ही सुंदर पॉलीक्वाइन है (जो उदाहरण के रूप में कार्य करती है और अवधारणा का प्रमाण है):

s="s=%p;puts s%%s;#Print[StringReplace[s,{(f=FromCharacterCode)@{37,112}->ToString@InputForm@s,f@{37,37}->f@37}]]&@1";puts s%s;#Print[StringReplace[s,{(f=FromCharacterCode)@{37,112}->ToString@InputForm@s,f@{37,37}->f@37}]]&@1

पहला हिस्सा इस रूबी क्वीन पर आधारित है और मूल रूप से है:

s="s=%p;puts s%%s;#MathematicaCode";puts s%s;#MathematicaCode

माथेमैटिका में स्ट्रिंग असाइनमेंट बिल्कुल समान है। puts s%s: 4 प्रतीकों में से एक उत्पाद के रूप में समझा जाता है puts, स्ट्रिंग s, %(या पिछले आरईपीएल परिणाम Out[0]यह पहली अभिव्यक्ति आप का मूल्यांकन है) और एक अन्य s। यह पूरी तरह से अर्थहीन है, लेकिन गणितज्ञ ;किसी भी आउटपुट की परवाह नहीं करता है और दबा देता है, इसलिए यह सिर्फ चुपचाप संसाधित होता है। फिर #शेष रेखा रूबी के लिए एक टिप्पणी करती है जबकि गणितज्ञ जारी है।

मैथमेटिका कोड के रूप में, इसका सबसे बड़ा हिस्सा रूबी के प्रारूप स्ट्रिंग प्रसंस्करण का अनुकरण करना है, बिना किसी स्ट्रिंग शाब्दिक का उपयोग किए। FromCharacterCode@{37,112}है %pऔर FromCharacterCode@{37,112}है %%। पूर्व को स्ट्रिंग के साथ बदल दिया जाता है, (जहां InputFormउद्धरण जोड़ता है) एक के साथ बाद वाला %। परिणाम Printएड है। अंतिम कैच है कि #सामने वाले से कैसे निपटें । यह शुद्ध (अनाम) फ़ंक्शन के पहले तर्क के लिए मैथमेटिका का प्रतीक है। तो हम क्या है हम बनाने जोड़कर कि एक शुद्ध समारोह के सभी &और तुरंत तर्क के साथ समारोह को लागू 11एक फ़ंक्शन कॉल के साथ प्रीपेडिंग करने से परिणाम "गुणा" होता है1, जो गणितज्ञ फिर से निगल लेता है, भले ही फ़ंक्शन द्वारा किस तरह की चीज वापस कर दी गई हो।


2

> <> और CJam, 165 बाइट्स

"~~~~~~~~~~~~~~~~~~~~~~~r00gol?!v93*0.Hi
'                               <       .1*5av!?log10oar~~~r
'"`{"`"\"_~e#.21 <.2+4*96;!?log10oa"}_~e#.21 <.2+4*96;!?log10oa

CJam को, कार्यक्रम एक बहु-पंक्ति स्ट्रिंग शाब्दिक के साथ शुरू होता है। यह बच जाता है `, और फिर यह क्वीन कोड को प्रिंट करने के लिए मानक क्वीन का उपयोग करता है, साथ ही साथ एक अनुगामी टिप्पणी भी करता है।

> <> के लिए, पहले "एक स्ट्रिंग शाब्दिक शुरू होता है जो पूरी तरह से पहली पंक्ति से गुजरता है, हर पात्र को स्टैक पर धकेलता है। उसके बाद, अनुगामी रिक्त स्थान (इनपुट गद्देदार होने के कारण निर्मित) हटा दिए जाते हैं, और फिर स्टैक उलट जाता है। स्टैक में प्रत्येक वर्ण (यानी पूरी पहली पंक्ति) आउटपुट है, और फिर यह दूसरी पंक्ति में नीचे चला जाता है।

दूसरी पंक्ति अनिवार्य रूप से एक ही काम करती है, सिवाय इसके कि यह विपरीत दिशा में है, इसलिए आपको स्टैक को उलटने की आवश्यकता नहीं है। (मैं वैसे भी करता हूं, क्योंकि मुझे अनुगामी रिक्त स्थान को हटाना होगा।)

अंत में, यह तीसरी पंक्ति पर जाता है। एकमात्र प्रमुख अंतर यह है कि आपको सीजाम ब्लॉक को छोड़ना चाहिए, जो कि .एकल उद्धरण का उपयोग करके किया जाता है पूरी लाइन (फिर, पीछे की ओर) को पकड़ता है, और फिर यह आउटपुट है।


2

C / PHP, 266 304 300 282 241 203 + 10 बाइट्स

//<?php
function main($a){printf($a="%c//<?php%cfunction main(%ca){printf(%ca=%c%s%c,13,10,36,36,34,%ca,34,36,10,10,10);}%c#if 0%cmain();%c#endif",13,10,36,36,34,$a,34,36,10,10,10);}
#if 0
main();
#endif

+10 बाइट्स क्योंकि C में संकलन करने के लिए GCC कंपाइलर ध्वज की आवश्यकता होती है -Dfunction=

यह कैसे काम करता है (PHP में):

  • PHP दुभाषिया बस के <?phpरूप में HTML से पहले सब कुछ प्रिंट करता है। //HTML में कोई टिप्पणी नहीं है, इसलिए यह केवल मुद्रित है।
  • mainएक चर के साथ एक समारोह के रूप में घोषित किया गया है a
  • printf//एक मानक C / PHP क्वीनिंग विधि का उपयोग करके एक गाड़ी वापसी (पहले से छपे हुए ओवरराइड करने के लिए ) और फिर स्रोत कोड प्रिंट करता है।
  • #if 0 PHP द्वारा अनदेखा किया जाता है।
  • main($a)एक खाली चर को इनिशियलाइज़ करता है a। (पहले error_reporting(0)कॉलिंग के कारण होने वाली त्रुटियों को अनदेखा करने के लिए उपयोग किया जाता था main())
  • #endif PHP द्वारा भी अनदेखा किया जाता है।

यह कैसे काम करता है (सी में):

  • //<?php एक एकल-पंक्ति टिप्पणी है, इसलिए इसे अनदेखा किया जाता है।
  • functionकीवर्ड कमांड लाइन संकलक तर्क की वजह से नजरअंदाज कर दिया है -Dfunction=
  • जीसीसी और क्लैंग को परवाह नहीं है अगर चर के साथ शुरू होता है या होता है $। (इससे दिन बच गया।)
  • printf एक मानक C / PHP क्वीनिंग विधि का उपयोग करके एक गाड़ी वापसी (इस उदाहरण में बेकार) और फिर स्रोत कोड प्रिंट करता है।
  • #if 0तब तक सब कुछ अनदेखा करता है, जब तक कि endifPHP कॉल नहीं कर सकती main
  • #endif "मुझे अनदेखा करें" ब्लॉक को समाप्त करता है।

2

Wumpus / > <> / Befunge-98 28 बाइट्स

"]#34[~#28&o@,k+deg0 #o#!g00

Wumpus में यह कोशिश करो! , इसे> <> में आज़माएँ! , यह Befunge-98 में कोशिश करो!

यह काम किस प्रकार करता है:

वम्पस कोड:

  " Start string literal
    Bounce off end of line and come back
  " End string literal
   ] Push top of stack to bottom
    #34 Push double quote
       [~ Get bottom of stack and swap it with the double quote
         #28 Push 28
            &o@ Print the top 28 items on stack and terminate program

> <> कोड:

  " Start string literal
    Wrap when it reaches the end of the line
  " End string literal
   ]# Clear stack and reflect
  " Wrapping string literal again, but backwards
                     g00 Get the character from cell 0 (")
                 #o#! Skip into the printing loop
                      Exit with an error

Befunge-98 कोड:

  " Wrapping string literal
   ] Turn right
   ] Turn right again, going West
  " Wrapping string literal going West
                 !g00 Get double quote and invert it
              #o# Skip over the o instruction
           g0   Get double quote
        +de Push 27
     @,k    Print 27+1 items from the stack and terminate program.

1

05AB1E / 2sable, 14 बाइट्स, गैर-प्रतिस्पर्धात्मक

0"D34çý"D34çý

इसे ऑनलाइन आज़माएं! (05AB1E)
इसे ऑनलाइन आज़माएं! (2sable)

2sable 05AB1E से लिया गया है और समान है, लेकिन इसके प्रमुख अंतर हैं।

अनुगामी न्यूलाइन।


1
मुझे नहीं पता कि 2sable और 05AB1E की वर्तमान स्थिति क्या है, लेकिन पिछली बार जब मैंने जाँच की तो मैंने उन्हें एक भाषा की अलग-अलग बोलियाँ माना होगा।
मार्टिन एंडर

1

सी / टीसीएल, 337 बाइट्स

#define set char*f= 
#define F 
#define proc main(){ 
set F "#define set char*f= 
#define F 
#define proc main(){ 
set F %c%s%c; 
proc /* {} {} 
puts -nonewline %cformat %cF 34 %cF 34 91 36 36] 
set a {*/printf(f,34,f,34,91,36,36);} 
"; 
proc /* {} {} 
puts -nonewline [format $F 34 $F 34 91 36 36] 
set a {*/printf(f,34,f,34,91,36,36);} 

1

सी / विम 4.0, 1636 बाइट्स

नियंत्रण वर्ण शामिल हैं।

map () {}/*
map g ;data0df"f"cf"
f"cf"
f"D2kyyP;g6k2dd4x5jA"JxA","JxA","jyyPkJxA"jok;g2kdd4xkJx3jdd
map ;g O"vdldd0i# 0# 1# 2# 3# 4# 5# #0lx2lx2lx2lx2lx2lx2lx:s/##/#/g
o:s//"/gk0y2lj02lp"addk@ao:s//\\/gk0ly2lj02lp"addk@ao:s///gk04ly2lj02lp05l"vp"addk@ao:s///gk05ly2lj02lp05l"vp"vp"addk@ao:s//
/gk06ly2lj02lp05l"vp"vp"vp"addk@ao:s//
/gk02ly2lj02lp05l"vp"addk@a
unmap ()

map ;data o*/ char*g[]={"map () {}/*#2map g ;data0df#0f#0cf#0#5#3f#0cf#0#5#3f#0D2kyyP;g6k2dd4x5jA#0#3JxA#0,#0#3JxA#0,#0#3jyyPkJxA#0#3jo#3k;g2kdd4xkJx3jdd#2map ;g O#4#4#4#4#3#0vdldd0i## 0## 1## 2## 3## 4## 5## ###30lx2lx2lx2lx2lx2lx2lx:s/####/##/g#5o:s//#0/g#3k0y2lj02lp#0addk@ao:s//#1#1/g#3k0ly2lj02lp#0addk@ao:s//#4#4#3/g#3k04ly2lj02lp05l#0vp#0addk@ao:s///g#3k05ly2lj02lp05l#0vp#0vp#0addk@ao:s//#4#4#5/g#3k06ly2lj02lp05l#0vp#0vp#0vp#0addk@ao:s//#4#4#5/g#3k02ly2lj02lp05l#0vp#0addk@a#2unmap ()#2#2map ;data o*/ char*g[]={","#A#0#a#0,#0#b#0,#0#c#0#C#2","}; /*#3#2#2#0*/  print(char*s){char*t=s,c,d;while(c=*t++)if(c==35){c=*t++;if(c==35)putchar(c);else if(c==48)putchar(34);else if(c==49)putchar(92);else if(c==50)printf(#0#1n#0);else if(c==51)putchar(27);else if(c==52)putchar(22);else if(c==53)putchar(13);else if(c>64&&c<91)print(g[c-65]);else printf(g[c-97]);}else putchar(c);}  main(){print(g[1]);}"}; /*

"*/  print(char*s){char*t=s,c,d;while(c=*t++)if(c==35){c=*t++;if(c==35)putchar(c);else if(c==48)putchar(34);else if(c==49)putchar(92);else if(c==50)printf("\n");else if(c==51)putchar(27);else if(c==52)putchar(22);else if(c==53)putchar(13);else if(c>64&&c<91)print(g[c-65]);else printf(g[c-97]);}else putchar(c);}  main(){print(g[1]);}

आपके विम को निम्नलिखित सेट करने की आवश्यकता है:

set noai
set wm=0
set nosi
set tw=0
set nogdefault

1

सी / लिस्प, 555 बाइट्स

t(setq /*;*/){}main(){char q='\"',s='\\';char*a= 
"~%t(setq /*;*/){}main(){char q='~A';char*a= 
~S;char*b=/* 
)(setq a ~S) 
(setq */ ~S;printf(b,s,q,s,s,q,a,q,q,s,s,s,q,s,s,s,s,q,q,b,q/* 
)(format t /* a /* a */);}~%";char*b=/* 
)(setq a "\\\"',s='\\\\") 
(setq */ " 
t(setq /*;*/){}main(){char q='%c%c',s='%c%c';char*a= 
%c%s%c;char*b=/* 
)(setq a %c%c%c%c%c',s='%c%c%c%c%c) 
(setq */ %c%s%c;printf(b,s,q,s,s,q,a,q,q,s,s,s,q,s,s,s,s,q,q,b,q/* 
)(format t /* a /* a */);} 
";printf(b,s,q,s,s,q,a,q,q,s,s,s,q,s,s,s,s,q,q,b,q/* 
)(format t /* a /* a */);} 

जानबूझकर खाली पहली पंक्ति।


1

पर्ल / जावास्क्रिप्ट (स्पाइडरमोंकी), 106 बाइट्स

$_='$q=+[]?h^O:unescape("%27");print("$_="+$q+$_+$q+";eval($_)"||(q($_),"=$q$_$q;",q(eval($_))))';eval($_)

ऑनलाइन पर्ल की कोशिश करो!
जावास्क्रिप्ट ऑनलाइन की कोशिश करो!

व्याख्या

Quine डेटा को $_दोनों भाषाओं में संग्रहीत किया जाता है और फिर evaled, जो पर्ल में बहुत मानक प्रक्रिया है। मैंने TIO पर SpiderMonkey को चुना क्योंकि इसमें एक printफंक्शन है, लेकिन इसे आसानी से + 20 बाइट्स के लिए ब्राउज़र में पोर्ट किया जा सकता है (जोड़ सकते हैं)eval("print=alert");$_ एस परिभाषा की शुरुआत में )।

पर्ल में संग्रहीत डेटा को देखता है $_और evalहमेशा की तरह है। चूंकि +[]पर्ल में सत्यता है, स्ट्रिंग-एक्सओआर और के माध्यम से 'संग्रहीत किया जाता है । कॉल करने के लिए अंतिम चाल है$qhOprint जहां जावास्क्रिप्ट के लिए पहला भाग उपयोग करता है +, जो पर्ल में सभी वस्तुओं को संख्याओं के रूप में मानता है, और ऊपर जोड़ता है 0, फिर हम उस ||ऑपरेटर का उपयोग करते हैं जो हम वास्तव में चाहते हैं।(q($_),"=$q$_$q;",q(eval($_))) जो इसके बराबर है "\$_=$q$_$q;eval(\$_)"

जावास्क्रिप्ट में +[]रिटर्न 0, तो हम कहते हैं unescape("%27")स्टोर करने के लिए 'में$q (दुर्भाग्य से, atobdoesm't अस्तित्व SpirderMonkey में ...)। कॉल करने के लिए print, चूंकि +जावास्क्रिप्ट में संघटक ऑपरेटर है, पहला ब्लॉक वांछित आउटपुट बनाता है और दूसरे भाग ||को अनदेखा करने के बाद ।

करने के लिए धन्यवाद unescapeट्रिक पैट्रिक रॉबर्ट्स की टिप्पणी के लिए !


पर्ल / जावास्क्रिप्ट (ब्राउज़र), 108 बाइट्स

$_='eval("q=_=>_+``;printf=console.log");printf(q`$_=%s%s%s;eval($_)`,$q=+[]?h^O:atob("Jw"),$_,$q)';eval($_)

ऑनलाइन पर्ल की कोशिश करो!

$_='eval("q=_=>_+``;printf=console.log");printf(q`$_=%s%s%s;eval($_)`,$q=+[]?h^O:atob("Jw"),$_,$q)';eval($_)

व्याख्या

हम $_दोनों भाषाओं में और फिर quine data store करते हैंeval यह, जो पर्ल में बहुत मानक प्रक्रिया है, ।

पर्ल में संग्रहीत डेटा को देखता है $_और evalहमेशा की तरह है। evalभीतर $_मार डाला और पार्स करने में विफल रहता है, लेकिन यह है के बाद से किया गया है eval, त्रुटि नहीं है। printfतब कहा जाता है, एक भी उद्धृत स्ट्रिंग q()के साथ `, सीमांकक के साथ, जैसा कि केवल उपयोग करने `से कमांडों को शेल में निष्पादित किया जाएगा, फिर पहले उपयोग के लिए $q, क्योंकि +[]पर्ल में सत्य है,' में संग्रहीत है $qकी stringwise-XOR के माध्यम से hऔरO

जावास्क्रिप्ट में, evalब्लॉक $_एक फ़ंक्शन सेट करता है q, जो कि returnएक तर्क Stringऔर उपनाम के रूप में अपना तर्क देता console.logहै printf, क्योंकि पर्ल में console.logप्रारूप स्ट्रिंग की तरह printfहै। जब रिटर्न printfकहा जाता +[]है 0, तो हम atobडिकोड 'और स्टोर करने के लिए कॉल करते हैं $q


1

पर्ल 5 / रूबी / जावास्क्रिप्ट (Node.js) / बैश / पायथन 2 / पीएचपी , 1031 बाइट्स

s=1//2;_=r'''<?#/.__id__;s=+0;#';read -d '' q<<'';s=\';Q='echo s=1//2\;_=r$s$s$s\<\?\#/.__id__\;s=+0\;#$s\;read -d $s$s q\<\<$s$s\;s=\\$s\;Q=$s$Q$s\;eval\ \$Q;echo $q';eval $Q
$_='eval("0"?0?"def strtr(s,f,t);s.tr(f,t) end;class String;def chr(n);self+n.chr end;end":"$u=strtr=(s,f,t)=>[...f].reduce((s,a,i)=>s.replace(RegExp(a,`g`),t[i]),s);printf=console.log;(S=String).prototype.chr=function(n){return this+S.fromCharCode(n)}":[]&&"sub strtr{eval q(q(X)=~y/X/X/r)=~s/X/shift/ger}");printf(strtr("%s<?#/.__id__;s=+0;#j;read -d jj q<<jj;s=zj;Q=jecho s=1//2z;_=rksksksz<z?z#/.__id__z;s=+0z;#ksz;read -d ksks qz<z<ksksz;s=zzksz;Q=kskQksz;evalz zkQ;echo kqj;eval kQwk_=j%sj;eval(k_);//;#jjj;f=jjjs=1//2;_=r%%s%%s%%s;f=%%s%%s%%s;q=_[18]*3;print f%%%%(q,_,q,q,f,q)jjj;q=_[18]*3;print f%%(q,_,q,q,f,q)%s","jkwz","".chr(39).chr(36).chr(10).chr(92).chr(92)),[]&&"s=1//2;_=r".chr(39).chr(39).chr(39),$_,$u?"":"".chr(10));';eval($_);//;#''';f='''s=1//2;_=r%s%s%s;f=%s%s%s;q=_[18]*3;print f%%(q,_,q,q,f,q)''';q=_[18]*3;print f%(q,_,q,q,f,q)

इसे ऑनलाइन सत्यापित करें!

इस उत्तर के लिए मेरे अपडेट के आधार पर , मुझे लगा कि मैं कोशिश करूंगा और एक अलग क्रमचय को छापने वाले कोड को ऑप्टिमाइज़ करूंगा, लेकिन बैश में जोड़ना समाप्त कर दिया, जिसने वैसे भी एक लोड बाइट्स को जोड़ा। जबकि यह मेरे पहले प्रयास (300 से अधिक बाइट्स से बचा हुआ) से अधिक अनुकूलित है, मुझे यकीन है कि यह अभी भी आगे बढ़ाया जा सकता है।


वैकल्पिक पर्ल 5 / रूबी / जावास्क्रिप्ट (Node.js) / बैश / पायथन 2 / पीएचपी , 1040 बाइट्स

s=1//2;_=r'''<?#/.__id__;s=+0;#';read -d '' q<<'';s=\';Q='echo s=1//2\;_=r$s$s$s\<\?\#/.__id__\;s=+0\;#$s\;read -d $s$s q\<\<$s$s\;s=\\$s\;Q=$s$Q$s\;eval\ \$Q;echo $q';eval $Q
$_='$z=0?"$&".next+92 .chr+10 .chr: 0..a||eval("printf=console.log;unescape`$%27%5C%0Ak`");$q=$z[1]?$z[1]:h^O;printf("%s%s%s%s<?#/.__id__;s=+0;#%s;read -d %s%s q<<%s%s;s=%s%s;Q=%secho s=1//2%s;_=r%ss%ss%ss%s<%s?%s#/.__id__%s;s=+0%s;#%ss%s;read -d %ss%ss q%s<%s<%ss%ss%s;s=%s%s%ss%s;Q=%ss%sQ%ss%s;eval%s %s%sQ;echo %sq%s;eval %sQ%s%s_=%s%s%s;eval(%s_);//;#%s%s%s;f=%s%s%ss=1//2;_=r%%s%%s%%s;f=%%s%%s%%s;q=_[18]*3;print f%%%%(q,_,q,q,f,q)%s%s%s;q=_[18]*3;print f%%(q,_,q,q,f,q)%s",[]&&"s=1//2;_=r",$r=[]&&$q,$r,$r,$q,$q,$q,$q,$q,$b=$z[2]?$z[2]:chr(92),$q,$q,$b,$d=$z[0]?$z[0]:h^L,$d,$d,$b,$b,$b,$b,$b,$d,$b,$d,$d,$b,$b,$d,$d,$b,$b,$b,$d,$b,$d,$d,$d,$b,$b,$b,$d,$d,$q,$d,$n=$z[3]?$z[3]:chr(10),$d,$q,$_,$q,$d,$q,$q,$q,$q,$q,$q,$q,$q,$q,$z[4]?"":$n);';eval($_);//;#''';f='''s=1//2;_=r%s%s%s;f=%s%s%s;q=_[18]*3;print f%%(q,_,q,q,f,q)''';q=_[18]*3;print f%(q,_,q,q,f,q)

इसे ऑनलाइन सत्यापित करें!

मेरे मूल दृष्टिकोण के थोड़ा सा करीब, लेकिन printfअभी तक के लिए आर्गन्स की पुनरावृत्ति पागल है। स्थितीय तर्कों का उपयोग बजाय क्रोम में यह केवल काम करते हैं और अच्छी तरह से क्योंकि जैसा कि PHP में काम कर पाने के मुश्किल है $sमें %1$sअंतर्वेशित है, लेकिन बाइट्स का एक बहुत बचा सकता है, शायद दो दृष्टिकोण के संयोजन का उपयोग ...


0

सी / डीसी, 152 बाइट्स

z1d//[[z1d//]P91PP93P[dx]Pq 
;main(){char*a="z1d//[[z1d//]P91PP93P[dx]Pq%c;main(){char*a=%c%s%c;printf(a,10,34,a,34);}//]dx";printf(a,10,34,a,34);}//]dx

टिप्पणियों का लाभ उठाते हुए, हाँ!


0

पर्ल 5 / रूबी / पीएचपी / जावास्क्रिप्ट (ब्राउज़र), 153 बाइट्स

$_='$z=0?"$&".next: 0..a||eval("printf=console.log;atob`JCc`");printf("%s_=%s%s%s;eval(%s_);",$d=$z[0]?$z[0]:h^L,$q=$z[1]?$z[1]:h^O,$_,$q,$d);';eval($_);

ऑनलाइन पर्ल की कोशिश करो!
रूबी ऑनलाइन की कोशिश करो!
PHP ऑनलाइन की कोशिश करो!

$_='$z=0?"$&".next: 0..a||eval("printf=console.log;atob`JCc`");printf("%s_=%s%s%s;eval(%s_);",$d=$z[0]?$z[0]:h^L,$q=$z[1]?$z[1]:h^O,$_,$q,$d);';eval($_);

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