एक फ्रैगाइल क्वीन


30

एक फ्रैगाइल क्वीन

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

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

sdf
adf
asf
asd

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

सामान्य कमज़ोर प्रतिबंधों (जैसे स्वयं के स्रोत कोड को पढ़ने में सक्षम नहीं) सहित मानक कमियां लागू होती हैं।

उदाहरण के लिए, print("foo")नाजुक नहीं है। इन सभी पदार्थों में त्रुटि होनी चाहिए:

rint("foo")
pint("foo")
prnt("foo")
prit("foo")
prin("foo")
print"foo")
print(foo")
print("oo")
print("fo")
print("fo")
print("foo)
print("foo"

जो त्रुटि नहीं करते हैं वे हैं:

print("oo")
print("fo")
print("fo")

तो यह नाजुक नहीं है।

Quines पर एक महत्वपूर्ण नोट

सर्वसम्मति से , किसी भी संभावित क्वीन को इस पर संतोष करना चाहिए:

कार्यक्रम के एक हिस्से की पहचान करना संभव है जो कार्यक्रम के एक अलग हिस्से को एन्कोड करता है। ("भिन्न" का अर्थ है कि दोनों भाग अलग-अलग स्थिति में दिखाई देते हैं।)

इसके अलावा, एक क्वीन को सीधे या परोक्ष रूप से अपने स्वयं के स्रोत तक नहीं पहुंचना चाहिए।

उदाहरण

चूँकि मैं जावास्क्रिप्ट के फंक्शन पर विचार करता हूं # toString "रीडिंग इट्स ओन ओन सोर्स कोड", मैं इसे अस्वीकार कर रहा हूं। हालांकि, अगर मैं इसे बार नहीं कर रहा था, तो यहां जावास्क्रिप्ट में एक नाजुक क्वीन है:

f=(n=b=`f=${f}`)=>(a=(n)==`f=${f}`,n=0,a)&(n!=b)?b:q

टेस्टर

यहाँ एक प्रोग्राम है जो आपके प्रोग्राम के सोर्स कोड को देखते हुए, उन सभी प्रोग्राम्स को जनरेट करता है जिन्हें एरर होना चाहिए।

let f = (s) =>
  [...Array(s.length).keys()].map(i =>
    s.slice(0, i) + s.slice(i + 1)).join("\n");

let update = () => {
  output.innerHTML = "";
  output.appendChild(document.createTextNode(f(input.value)));
};

input.addEventListener("change", update);

update();
#output {
  white-space: pre;
}

#input, #output {
  font-family: Consolas, monospace;
}
<input id="input" value="print('foo')">
<div id="output"></div>


क्या मैंने HQ9 + की अनुमति दी है?
ओलिवर नी

1
@ ओलिवरनी नं
कोनोर ओ'ब्रायन

3
यह भाषा की विशेषताओं के बारे में धारणा बना रहा है - सभी भाषाओं में "त्रुटियां" नहीं हैं।
मेगो

2
@Mego त्रुटियों के बजाय अनंत छोरों की भी अनुमति है। प्रत्येक ट्यूरिंग-पूर्ण भाषा में अनंत लूप होते हैं।
feersum

1
@ आम जो अप्रासंगिक है। यहां तक ​​कि सामान्य मामले को लाने की जहमत क्यों उठाई जाती है अगर केवल एक परिमित सबसेट समस्या पर लागू होता है?
कोनोर ओ'ब्रायन

जवाबों:


6

बर्लेस्क ,32 28 25 बाइट्स

{3SHWD{Je!}.+{Sh}\msh}Je!

इसे यहाँ आज़माएँ।

इसलिए बर्लेस्क में अधिकांश निर्देश 2 वर्ण हैं। और मारबेलस की तुलना में बर्लेस्क में एक रानी लिखना बहुत आसान है। Je!या ^^e!साधन _~CJam में।


1
रुको ... अगर यह गोल्फ नहीं है (और अब तक सबसे छोटा है), तो मैं कल्पना नहीं कर सकता कि क्या गोल्फ है! +1
डैनियल

@ डोप्प्प समस्या यह है कि बर्लेस्क के पास बहुत अधिक निर्देश हैं, इसलिए यह बहुत संभव है कि मैंने कुछ याद किया।
jimmy23013

11

पायथन 3, 45 बाइट्स

c='print(end="c=%r;exec(c"%c+c[8*4])';exec(c)

पायथन 3 पर स्विच करना ताकि अनुगामी न्यूलाइन को आसानी से हटाया जा सके।

मैंने एक बेवकूफ संरचना के साथ शुरुआत की जिसमें 1 के बजाय 2 चर थे, लेकिन केवल 1 चर पर स्विच करने से यह 4 बाइट्स छोटा हो गया।

- (4 + 3) डेनिस द्वारा बाइट्स।


मुखर के बारे में पता नहीं था। अच्छा काम
विनाशकारी नींबू

2
यदि आप एक स्पष्टीकरण जोड़ते हैं तो बहुत अच्छा होगा।
सर्ज बोर्स्च

execमेरी %चाल के साथ अपनी संरचना को मिलाकर , c='print(end=len(c)%5*"c=%r;exec(c)"%c)';exec(c)48 बाइट्स के लिए है।
डेनिस

1
c='print(end="c=%r;exec(c"%c+c[8*4])';exec(c)3 और बाइट्स बचाता है।
डेनिस

7

पायथन, 91/92 67 बाइट्स

यह मजेदार था!

अब मुझे पता है:

s='s=%r;assert len(s)==34;print(s%%s)';assert len(s)==34;print(s%s)

यदि स्ट्रिंग से एक चार्ट हटा दिया जाता है, तो त्रुटि का दावा करें। मैंने जल्द ही ऐसा किया होगा मुझे इस विशेषता का पता था, मुखर।


2
मैं अनुगामी newline प्रश्न के बारे में भूल गया ... यदि आप इसे गिनते हैं, तो हमारे उत्तर अमान्य हैं क्योंकि इसे सुरक्षित रूप से हटाया जा सकता है।
फ़र्सम

7

पायथन 2, 51 50 46 बाइट्स

lambda s='lambda s=%r:s[22:]%%s%%s':s[22:]%s%s

इसे आइडोन पर सत्यापित करें ।


फंक्शन क्वाइन वास्तव में अनुमत हैं।
कॉनर ओ'ब्रायन

1
है ना? मैंने कभी भी फंक्शन को क्वाइंस के रूप में अनुमति नहीं दी है ... क्या इसके लिए कोई उदाहरण हैं?
feersum

@ Faersum क्वेरी जावास्क्रिप्ट क्वीन कुछ परिणाम देता है।
डेनिस

@ फर्सम स्टैण्डर्ड मैथेमेटिका क्वीन भी फंक्शन बेस्ड (उपयोग #0) है।
मार्टिन एंडर

2
मुझे अभी एक और रूप मिला है और अधिकांश JS या Mathematica quines वास्तव में फ़ंक्शन को भी कहते हैं। इसलिए उन्हें REPL quines कहना ज्यादा सही होगा। उस ने कहा, इस चुनौती के संबंध में कॉनर ने जो उदाहरण दिया है वह सिर्फ एक फ़ंक्शन है, इसलिए मुझे लगता है कि कम से कम यह यहां मान्य है।
मार्टिन एंडर

4

सी #, 145 बाइट्स

_=>{var@s="_=>{{var@s={1}{0}{1};for(;79!=s.Length;){{}}System.Console.Write(s,s,'{1}');}};";for(;79!=s.Length;){}System.Console.Write(s,s,'"');};

मैंने पहले C # में एक क्वीन नहीं लिखा है, लेकिन गोल्फ में उच्च स्कोर बेहतर हैं, है ना? :)

अनंत लूप अगर एक स्ट्रिंग स्ट्रिंग से हटा दिया जाता है या जादू कास्ट 79 से एक अंक है। एक संकलन त्रुटि में किसी अन्य चार परिणामों को हटाने।

Ungolfed:

/* Action<object> Quine = */ _ => // unused parameter
{
    // String of the function (well, mostly).
    // {0} placeholder for s, so the output contains the function and string.
    // {1} placeholder for " since it requires escaping.
    var@s = "_=>{{var@s={1}{0}{1};for(;79!=s.Length;){{}}System.Console.Write(s,s,'{1}');}};";

    // Infinite loop if a char is removed from the above string or if the 7 or 9 is removed.
    for(;79!=s.Length;){}

    // Print the quine.
    System.Console.Write(s,s,'"');
};

3

जावास्क्रिप्ट, 90 बाइट्स

a="a=%s;a[44]!=')'?x:console.log(a,uneval(''+a))";a[44]!=')'?x:console.log(a,uneval(''+a))

फ़ायरफ़ॉक्स 48 के कंसोल में काम करता है, और साथ किसी अन्य वातावरण में काम करना चाहिए unevalऔर console.log। त्रुटियों का टूटना:

a="                                             "; [  ]!=' '?x:           (a       (''+a))   // SyntaxError
   a=%s;a[44]!=')'?x:console.log(a,uneval(''+a))  a 44    )                                  // ReferenceError from calling `x`
                                                               console.     ,uneval          // ReferenceError from calling `onsole.log`, `auneval`, etc.
                                                                       log                   // TypeError from calling `console.og`, etc.

वाह, क्या पता नहीं है। इसके अलावा, कम से कम कुछ हद तक आपको देखकर अच्छा लगा! : डी
कॉनर ओ'ब्रायन

@ ConorO'Brien (कम से कम कुछ हद तक) अच्छा लगा! मैंने इस तकनीक का उपयोग करके कुछ और क्वीन-वाई उत्तर पोस्ट किए हैं ।
ETHproductions

2

अजगर 2, 59 बाइट्स

x='x=%r;1/(len(x)==30);print x%%x';1/(len(x)==30);print x%x

यह ZeroDivisionErrorएक 0, 3 या एक वर्ण स्ट्रिंग से हटा दिया जाता है, तो फेंकता है । किसी भिन्न वर्ण को निकालने से परिणाम NameErrorया a SyntaxError


2

एक नाशपाती का पेड़ , 50 बाइट्स

a="print('a='.repr(a).';eval(a)');#f+QF>";eval(a)

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

सबसे छोटा जवाब नहीं है, लेकिन काफी व्यापक है; इस प्रोग्राम से कोई भी वर्ण विलोपन चेकसम में विफल होने का कारण बनता है, इस प्रकार एक नाशपाती ट्री दुभाषिया भी इसे चलाने का प्रयास नहीं करेगा। (उदाहरण के लिए, यदि आप अनुगामी न्यूलाइन को हटाते हैं, तो आपको एक त्रुटि मिलती है।) यह ;#f+QF>सुनिश्चित करने के लिए उपयोग किया जाता है कि पूरे के रूप में प्रोग्राम में 0 का CRC-32 है (और f+QF>तीन संभावित 5-बाइट स्ट्रिंग्स में से एक है जिसे अंदर रखा जा सकता है। ASCII में रहते हुए यह प्राप्त करने के लिए टिप्पणी, ASCII का उपयोग reprकरना यहाँ महत्वपूर्ण है क्योंकि यह अन्यथा सही ढंग से गोल-यात्रा करने में विफल होगा)।

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