ত্রুটি (বা সতর্কতা) কুইন এটিও একটি নিয়মিত কুইন [বন্ধ]


9

( একটি পুরানো প্রশ্নের উপর এই মন্তব্য দ্বারা অনুপ্রাণিত ।)

পটভূমি

একটি ত্রুটি কুইন ("কিমিয়ান কুইন" নামেও পরিচিত) এমন একটি প্রোগ্রাম যা সংকলিত বা সঞ্চালনের সময় সংকলক / দোভাষী / রানটাইমকে প্রোগ্রামে অভিন্ন পাঠ্য রয়েছে এমন একটি ত্রুটি বার্তা প্রিন্ট করার কারণ এবং অন্য কিছুই নয়। এই চ্যালেঞ্জের উদ্দেশ্যে, আমরা সতর্কতাও অন্তর্ভুক্ত করার জন্য, "ত্রুটি" বিস্তৃতভাবে সংজ্ঞায়িত করছি।

কার্য

এই চ্যালেঞ্জের মধ্যে আমরা একটি সন্ধান করছি যা এছাড়াও একটি ত্রুটি quine। কার্যকর করা হলে, প্রোগ্রামটি অবশ্যই নিজের উত্স কোডটি সাধারণত মুদ্রণ করে (যেমন ত্রুটি / সতর্কবার্তা হিসাবে নয়); এটি অবশ্যই একটি যথাযথ কুইন হতে হবে (যেমন প্রোগ্রামের কিছু অংশ অবশ্যই আউটপুটটির একটি আলাদা অংশকে এনকোড করতে পারে)। উপরন্তু, সংকলন এবং নির্বাহ প্রোগ্রাম আবশ্যক এছাড়াও প্রোগ্রামের সোর্স কোড কারণ - এবং অন্য কিছুই - ত্রুটি যেমন ছাপা হবে বা বাস্তবায়ন দ্বারা সতর্কবাণী। (দ্রষ্টব্য যে এর অর্থ এই যে আপনি যে ভাষাগুলি প্রোগ্রামটি সাধারণত চালানো থেকে বিরত করেন সে ভাষাগুলিতে আপনি সংকলন-সময় ত্রুটিগুলি ব্যবহার করতে সক্ষম হবেন না)) সুতরাং অন্য কথায়, প্রতিটি পদ্ধতির মাধ্যমে প্রোগ্রামটির উত্স কোডটি দু'বার মুদ্রিত হবে।

ব্যাখ্যা

  • বেশিরভাগ ক্ষেত্রে, এটি ত্রুটি / সতর্কতা বার্তা কী এবং এটি স্পষ্ট হবে; আমরা এখানে দুজনের মধ্যে পার্থক্য করছি না। অস্পষ্ট ক্ষেত্রে, কোনও ত্রুটি / সতর্কতা বার্তাটিকে যে কোনও পাঠ্য হিসাবে প্রয়োগ করে আউটপুট হিসাবে সংজ্ঞায়িত করুন: ১. কমান্ড কার্যকর করা ছাড়া অন্য কোনও কিছুর ফলস্বরূপ (বা এর নিকটবর্তী সমান ভাষাটিতে যা আছে); অথবা ২. এটি আউটপুট হিসাবে উত্পাদিত কমান্ডের ইনপুটটির অংশ ছিল না।
  • কুইনের ত্রুটি / সতর্কবার্তার অংশটিকে যথাযথ কুইন হওয়ার প্রয়োজন নেই (যদিও বেশিরভাগ ক্ষেত্রে এটি যথাযথভাবে হবে, কারণ বেশিরভাগ ত্রুটি এবং সতর্কতা বার্তায় যথেষ্ট পরিমাণে নির্দিষ্ট পাঠ্য রয়েছে)।
  • প্রোগ্রামটি একাধিক ত্রুটি / সতর্কবার্তা আউটপুট করা গ্রহণযোগ্য, যা একসাথে একত্রিত হয়ে প্রোগ্রামের উত্স তৈরি করে। উত্সে উপস্থিত না হওয়া আউটপুট ত্রুটি / সতর্কতাগুলির পক্ষে এটি গ্রহণযোগ্য নয়।
  • অনেক চ্যালেঞ্জের বিপরীতে, সংকলককে দেওয়া সুইচগুলি এবং প্রোগ্রামের ফাইলের নামগুলি এই চ্যালেঞ্জের ক্ষেত্রে অত্যন্ত প্রাসঙ্গিক হতে পারে। প্রদত্ত যে চ্যালেঞ্জ অন্যথায় সম্ভব নাও হতে পারে, আমি এখানে নমনীয় হতে ইচ্ছুক, যদিও আপনি যদি অস্বাভাবিক উপায়ে বাস্তবায়ন পরিচালনা করেন তবে মনে রাখবেন যে পিপিসিজি নিয়মগুলি এটি করার জন্য বাইট জরিমানা আদায় করে (অতিরিক্ত অক্ষরের সংখ্যার সমান যে আপনাকে কোনও প্রোগ্রাম চালানোর জন্য সবচেয়ে কম "স্বাভাবিক" উপায়ের উপরে কমান্ড লাইনে যুক্ত করতে হবে) এবং এইভাবে আপনাকে আপনার পোস্টে জরিমানার আকার নির্দিষ্ট করতে হবে। (উদাহরণস্বরূপ, আপনি যে ইন্টারপ্রেটারটি ব্যবহার করছেন তা যদি কোনও ফাইল থেকে প্রোগ্রামটি পড়ে এবং ফাইলনামে কোনও বিশেষ বিধিনিষেধ না থাকে তবে প্রোগ্রামটি চালানোর সবচেয়ে স্বল্পতমতম উপায়টি 1-অক্ষরের ফাইলনামযুক্ত ফাইল হতে পারে;
  • আপনি যে সংকলক / দোভাষা সংস্করণ ব্যবহার করেন তা প্রাসঙ্গিক হতে পারে, সুতরাং আপনার জমা দেওয়ার অংশ হিসাবে দয়া করে একটি নির্দিষ্ট সংকলক বা দোভাষী লিখুন যেখানে আপনার প্রোগ্রামটি কাজ করে এবং কোন সংস্করণটি প্রয়োজনীয়। (উদাহরণস্বরূপ, একটি সি জমা দিতে শিরোনামে "সি (জিসিসি 6.2.0)" থাকতে পারে))
  • মনে রাখবেন যে এই কাজটি সমস্ত ভাষায় সম্ভব হতে পারে না। এটি যে ভাষাগুলিতে রয়েছে, সবচেয়ে সহজ পদ্ধতি হ'ল কোনও ত্রুটি বা সতর্কতা বার্তা সন্ধান করা হবে যার জন্য পাঠ্যের কিছু উপসেট কাস্টমাইজ করা সম্ভব (বার্তায় উদ্ধৃত হওয়া কিছুটির নাম পরিবর্তন করে; ফাইলের নামগুলি একটি সাধারণ পছন্দ) এখানে, তবে একমাত্র নয়)। যদি কেউ কেবল ত্রুটি এবং সতর্কতা বার্তা যার পাঠ্য স্থির করে থাকে তা ব্যবহার করে এটি করার উপায় খুঁজে পেয়ে আমি বিশেষভাবে মুগ্ধ (এবং অবাক হয়ে যাব) be

বিজয় শর্ত

এটা একটা চ্যালেঞ্জ, সুতরাং একটি এন্ট্রি আরও ভাল হিসাবে বিবেচনা করা হয় যদি এটির একটি ছোট বাইট গণনা থাকে। যেমন, আপনার প্রোগ্রামটি একবারে কাজ করার পরে, আপনি যতটা সম্ভব বাইটের সংখ্যা কমিয়ে আনতে এটি অনুকূলিত করতে চান। (তবে, ইতিমধ্যে একটি সংক্ষিপ্ত এন্ট্রি থাকলে নিরুৎসাহিত হবেন না, বিশেষত এটি ভিন্ন ভাষায় থাকলে; আমরা এখানে যা খুঁজছি তা হ'ল একটি প্রোগ্রামের পিছনে একটি নির্দিষ্ট অ্যালগরিদম বা ধারণা যতটা সম্ভব সংক্ষিপ্ত করা, তবে একাধিক দেখতে বিভিন্ন ভাষায় সমাধানগুলি বা বিভিন্ন নীতিগুলির উপর নির্ভর করে সর্বদা সার্থক)


2
আমি যেমন আড্ডায় বলেছিলাম, আমি মনে করি প্রথম বুলেট পয়েন্টটি অস্পষ্ট। বেশিরভাগ ক্ষেত্রে, এটি স্পষ্ট হবে যে কোনটি এবং কোনটি নয় ত্রুটি / সতর্কতা বার্তাটি কেবল আলোচনা এবং ভাষা-আইনীকরণের সূচনা পয়েন্ট হিসাবে কাজ করে।
ডেনিস

@ ডেনিস: আমি নীতিগতভাবে একমত যে পরিস্থিতিটি দুর্দান্ত নয়, তবে অন্যদিকে এটির উন্নতির কোনও দৃ concrete় উপায় নিয়ে ভাবতে পারি না; স্পষ্টতই ত্রুটি বার্তাগুলির জন্য ব্যতিক্রমগুলি অপসারণ করার ফলে কিছু ভাষায় কিছু অযৌক্তিক পরিস্থিতি দেখা দেয়, যা এর নিরাময়ের চেয়ে আরও বেশি ক্ষতি হতে পারে; যদি আপনি মনে করেন আপনি প্রশ্নটির উন্নতি করতে পারেন তবে এটি সম্পাদিত হওয়ার বিষয়ে আমার কোনও আপত্তি নেই (এবং আমি সত্যিই মনে করি না যে পিপিসি সম্পর্কিত প্রশ্নগুলির যেভাবেই "মালিকানা" হওয়া উচিত)

যেমনটি হ'ল, আমি মনে করি যে প্রশ্নটি অস্পষ্ট এবং উদ্দেশ্যমূলক বৈধতার মানদণ্ডের অভাব রয়েছে। আমি সম্মত হই যে আমার প্রস্তাবিত পরিবর্তনগুলি আরও খারাপ করতে পারে। কার্যক্ষমতার একটি সম্ভাব্য উপায় হ'ল চ্যালেঞ্জটি ধরে রাখা এবং এটি স্যান্ডবক্সে পোস্ট করা।
ডেনিস

1
আমি আপাতত চ্যালেঞ্জটি ধরে রেখেছি। আমি আশা করি আপনি এটি স্যান্ডবক্সে পুনরায় পোস্ট করে দেখবেন। এটি একটি খুব আকর্ষণীয় ধারণা, এবং এটি নষ্ট হতে দেওয়া লজ্জাজনক হবে।
ডেনিস

1
স্যান্ডবক্স পোস্ট এখানে । (আমি এটিকে সম্পাদন করার প্রশ্নে ভাবছিলাম, তবে এটি পোস্টটিকে আবার খোলার কাতারে ফেলে দেবে, যা অত্যন্ত

উত্তর:


9

জাভাস্ক্রিপ্ট (ফায়ারফক্স 50), 153 বাইট

Error: "Error: 1.replace(/.+/,x=>{alert(x=x.replace(1,uneval(x)));throw x.slice(7)})".replace(/.+/,x=>{alert(x=x.replace(1,uneval(x)));throw x.slice(7)})

ব্যাখ্যা

এখানে ধারণাটি ছিল যে আমি এখনও খুঁজে পেয়েছি এমন খুব সহজেই সংশোধনযোগ্য জেএস কুইন দিয়ে শুরু করব:

".replace(/.+/,x=>alert(uneval(x)+x))".replace(/.+/,x=>alert(uneval(x)+x))

throwশব্দ এটা ভাল নিজস্ব কোড নিক্ষেপ করতে একটি সহজ উপায় হল:

".replace(/.+/,x=>{alert(x=uneval(x)+x);throw x})".replace(/.+/,x=>{alert(x=uneval(x)+x);throw x})

তবে, একটি সামান্য সমস্যা আছে: ফায়ারফক্স নিক্ষেপ করা বার্তাটি এর সাথে সংশোধন করে Error:। ভাগ্যক্রমে, Error: mycodeআসলে বৈধ জাভাস্ক্রিপ্ট! (এ সম্পর্কে আরও জানতে, এমডিএন দেখুন )

Error: ".replace(/.+/,x=>{alert(x=uneval(x)+x);throw x})Error: ".replace(/.+/,x=>{alert(x=uneval(x)+x);throw x})

ওফস, এটি ভুল জিনিসটি সতর্ক করে:

".replace(/.+/,x=>{alert(x=uneval(x)+x);throw x})Error: ".replace(/.+/,x=>{alert(x=uneval(x)+x);throw x})Error: 

যেহেতু কোডটির শুরুতে কোটেশন চিহ্নটি আর নেই, তাই uneval(x)+xআমাদের সঠিক ফলাফল দেয় না। এটিকে ঠিক করার সর্বোত্তম উপায় হল নেস্টেড স্ট্রিংয়ের জায়গায় একটি স্থানধারক যুক্ত করা:

Error: "Error: 1.replace(/.+/,x=>{alert(x=x.replace(1,uneval(x)));throw x})".replace(/.+/,x=>{alert(x=x.replace(1,uneval(x)));throw x})

ওহ, এখন Error:ত্রুটি বার্তায় একটি অতিরিক্ত আছে। স্ট্রিং টুকরো টুকরো করে এটি ঠিক করুন:

Error: "Error: 1.replace(/.+/,x=>{alert(x=x.replace(1,uneval(x)));throw x.slice(7)})".replace(/.+/,x=>{alert(x=x.replace(1,uneval(x)));throw x.slice(7)})

এবং পরিশেষে, আউটপুট এবং ত্রুটি বার্তা উভয়ই কোডটির সাথে একরকম! আমি একটি স্ট্যাক স্নিপেট যুক্ত করব, তবে এটি কোনও ব্রাউজারে স্নিপেটে কাজ করবে বলে মনে হয় না।


5

পাইথন 2, 217 80 51 বাইট

ট্রেলিং লাইনফিড প্রয়োজনীয়।

s='s=%r;print s%%s;exit(s%%s)';print s%s;exit(s%s)

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

আমি একটি সহজ কুইন দিয়ে শুরু করেছি:

s='s=%r;print s%%s';print s%s

তারপরে আমি raiseএকটি নিক্ষেপ করার শেষে যুক্ত করেছি IOError

s='s=%r;print s%%s;raise IOError(s%%s)';print s%s;raise IOError(s%s)

দুর্ভাগ্যক্রমে, ট্রেসব্যাকটি সমস্যা সৃষ্টি করছিল (আমি এটিকে পুরোপুরি সরিয়ে দিতে পারিনি), এবং ব্যতিক্রমটির নামটি সর্বদা সামনে যেমন মুদ্রণ করা হত IOError: <code here>, এমনকি আমি ট্রেসব্যাকটি সরিয়ে ফেললেও।

তারপরে আমি এই সহায়ক এসও উত্তরটি পেয়েছি এবং এটি আমার উদ্দেশ্যে পরিবর্তন করেছি ified

তারপরে আমি দেখতে পেলাম যে আমি নিজের ক্লাস তৈরি করতে এড়াতে পারি sys.exitএবং আমার কোডটি আরও খাটো করে তৈরি করতে পারি।


1
আমি মনে করি না যে এটি চ্যালেঞ্জের অনুমানের ত্রুটির সংজ্ঞা মেনে চলেছে কারণ এটি কোনও কমান্ড কার্যকর করা ব্যতীত অন্য কোনও কিছুর পরিণতি হিসাবে নয় বা এটি আউটপুট হিসাবে উত্পাদিত কমান্ডের ইনপুটটির অংশ ছিল না । এটি বলেছিল, প্লেইন exitএখানে ঠিক কাজ করে। দরকার নেই sys
ডেনিস

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