एक फ्रैगाइल क्वीन
एक नाजुक क्वीन एक ऐसी क्वीन है जो किसी एकल वर्ण को हटाकर किए गए प्रत्येक प्रतिस्थापन की संपत्ति को संतुष्ट करती है, जब मूल्यांकन किया जाता है, तो एक त्रुटि पैदा होती है।
उदाहरण के लिए। यदि आपका कार्यक्रम 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>