একটি ভঙ্গুর কুইন


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 উপর একটি গুরুত্বপূর্ণ নোট

Sensকমত্য দ্বারা , যে কোনও সম্ভাব্য কুইন অবশ্যই এটি সন্তুষ্ট করবে:

প্রোগ্রামটির একটি অংশ যা প্রোগ্রামের আলাদা অংশকে এনকোড করে তা অবশ্যই সনাক্ত করা সম্ভব। ("ভিন্ন" অর্থ যে দুটি অংশ বিভিন্ন অবস্থানে উপস্থিত রয়েছে))

তদতিরিক্ত, একটি কুইন সরাসরি বা অপ্রত্যক্ষভাবে তার নিজস্ব উত্স অ্যাক্সেস করা উচিত।

উদাহরণ

যেহেতু আমি জাভাস্ক্রিপ্টের ক্রিয়া # টু স্ট্রিংকে "এটির নিজস্ব উত্স কোডটি পড়া" বলে বিবেচনা করছি, তাই আমি এটিকে অস্বীকার করছি। তবে, আমি যদি এটি বার না করে থাকি তবে জাভাস্ক্রিপ্টে এখানে একটি ভঙ্গুর কুইন রয়েছে:

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>


আমি কি এইচকিউ 9 + অনুমোদিত?
অলিভার নি

1
@ অলিভারনি নং
কনর ও'ব্রায়েন


2
@ মেগো অসীম লুপগুলি ত্রুটির পরিবর্তে অনুমোদিত allowed প্রতিটি টিউরিং-সম্পূর্ণ ভাষায় অসীম লুপ থাকে।
ফেয়ারসাম

1
@ মেগো যা অপ্রাসঙ্গিক। এমনকি যদি সমস্যাটিতে কেবল একটি সীমাবদ্ধ সাবসেট প্রয়োগ হয় তবে কেন সাধারণ কেস আনতে বিরক্ত করবেন?
কনর ও ব্রায়েন

উত্তর:


6

বার্লেস্ক ,32 28 25 বাইট

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

এখানে চেষ্টা করুন।

সুতরাং বুর্লেস্কে বেশিরভাগ নির্দেশাবলী 2 টি অক্ষর। আর মার্বেলাসের চেয়ে বারলেস্কে কুইন লেখা অনেক সহজ। Je!বা সিজেমে ^^e!মানে _~


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 বাইট

এই মজা ছিল!

এখন আমি দৃsert়তা সম্পর্কে জানি:

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

যদি স্ট্রিং থেকে কোনও চরিত্রটি সরানো হয় তবে ত্রুটিটি চাপুন। আমি এই বৈশিষ্ট্যটি সম্পর্কে জানতাম যদি তাড়াতাড়ি এটি করা হত sert


2
আমি পেছনের নতুন লাইনের প্রশ্নটি ভুলে গেছি ... আপনি যদি এটি গণনা করেন তবে আমাদের উত্তরগুলি অবৈধ কারণ এটি নিরাপদে সরানো যেতে পারে।
feersum

7

পাইথন 2, 51 50 46 বাইট

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

আইডিয়নে এটি যাচাই করুন ।


ফাংশন কুইনগুলি সত্যই অনুমোদিত।
কনর ও ব্রায়েন

1
তাই না? আমি কখনও ফাংশনকে কুইন্স হিসাবে অনুমোদিত হওয়ার কথা শুনিনি ... এর কোনও উদাহরণ আছে কি?
ফেয়ারসুম

@ ফেয়ারসাম ক্যোয়ারী জাভাস্ক্রিপ্টের কয়েকটি ফলাফল দেয়।
ডেনিস

@ ফেয়ারসাম স্ট্যান্ডার্ড ম্যাথেমেটিকা ​​কুইন ফাংশন ভিত্তিক (ব্যবহার #0) is
মার্টিন ইন্ডার

2
আমার সবেমাত্র অন্য চেহারা ছিল এবং বেশিরভাগ জেএস বা ম্যাথমেটিকা ​​কুইনগুলি আসলে ফাংশনটিও বলে। সুতরাং এগুলিকে 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,'"');};

আমি এর আগে সি # তে একটি কুইন লিখিনি, তবে গল্ফে উচ্চতর স্কোরগুলি আরও ভাল, তাই না? :)

অসম্পূর্ণ লুপটি যদি চরটি স্ট্রিং থেকে সরিয়ে দেওয়া হয় বা ম্যাজিক কনস্টের 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.

বাহ, অবাস্তব সম্পর্কে জানতাম না। এছাড়াও, আপনাকে কিছুটা পিছনে দেখে ভাল লাগল! : ডি
কনর ও'ব্রায়েন

@ কনরও'ব্রায়েন ভাল লাগছে (অন্তত কিছুটা) ফিরে আসুন! আমি একটি পোস্ট করেছেন দম্পতি আরো quine-Y উত্তর এই প্রযুক্তিটি ব্যবহার করে।
ETH প্রোডাকশনস

2

পাইথন 2, 59 বাইট

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

এটি ZeroDivisionErrorএকটি 0, 3, অথবা একটি অক্ষরকে স্ট্রিং থেকে সরানো হলে একটি ছুড়ে ফেলে । একটি আলাদা অক্ষর অপসারণের ফলে NameErrorবা এক SyntaxError


2

একটি পিয়ার ট্রি , 50 বাইট

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

এটি অনলাইন চেষ্টা করুন!

সংক্ষিপ্ত উত্তর নয়, তবে মোটামুটি ব্যাপক উত্তর; এই প্রোগ্রামটি থেকে যে কোনও অক্ষর মুছে ফেলার কারণে এটি চেকসামে ব্যর্থ হতে পারে, সুতরাং একটি পিয়ার ট্রি দোভাষী এটি চালানোর চেষ্টাও করবেন না। (উদাহরণস্বরূপ, আপনি পেছনের নতুন লাইনটি মুছে ফেললে আপনি একটি ত্রুটি পেয়েছেন)) ;#f+QF>পুরো প্রোগ্রামটি নিশ্চিত করার জন্য ব্যবহৃত হয় যে 0 টির একটি সিআরসি -32 রয়েছে (এবং f+QF>এটি 3 টি বাইট স্ট্রিংগুলির মধ্যে একটি যা স্থাপন করা যেতে পারে ASCII এ থাকার সময়ে তা অর্জনের জন্য মন্তব্য; এএসসিআইআই ব্যবহার করা এখানে গুরুত্বপূর্ণ কারণ reprঅন্যথায় এটি সঠিকভাবে রাউন্ড ট্রিপ করতে ব্যর্থ হবে)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.