রেডিয়েশন কড়া কুইন


39

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

বিধি

  • প্রোগ্রামটি কমপক্ষে একটি অক্ষর দীর্ঘ হতে হবে
  • ব্যবহৃত ভাষা অবশ্যই টিউরিং সম্পূর্ণ হতে হবে (সুতরাং এইচকিউ 9 + এর মতো ভাষাগুলি যোগ্যতা অর্জন করে না)
  • অন্যান্য কয়টি নিয়ম যা সাধারণ কুইনে প্রয়োগ হয় তা এখানেও প্রযোজ্য।
  • অন্তত সঙ্গে সমাধান program_length^(2/n)যা কোনো ঠিক সেট nএখনও মুদ্রণের সময় মূল সোর্স কোড জয়ী অক্ষর সরানো হতে পারে।

1
আমি একটি সমাধান সঙ্গে আসতে চেষ্টা করছি Subleq। আমি মনে করি এটি এই জাতীয় চ্যালেঞ্জের জন্য আদর্শ হবে!


সম্ভবত নাম পরিবর্তন করুন, প্রদত্ত এটি কি তেজস্ক্রিয় শক্ত কুইনের মতো নয়? সম্ভবত "বিকিরণ- প্রুফ কুইন"?
সাইয়েস

@ কয়েস কেবলমাত্র পার্থক্যটিই আমি বলতে পারি যে এই চ্যালেঞ্জটি যে কোনও সংখ্যক অপসারণের জন্য, যদিও বেশিরভাগ (সমস্ত না থাকলে) অন্যান্য বিকিরণ-কড়া কুইন কেবল একটির জন্য অনুমতি দেয়।
তাকরা

বিখ্যাত "ম্যাম" থেকে রুবি সলিউশন। github.com/mame/radiation-hardened-quine
mbomb007

উত্তর:


57

পার্ল, 1116 1124 বাইট, এন = 3, স্কোর = 1124 ^ (2/3) বা প্রায় 108.1

আপডেট : আমি এখন যাচাই করেছি যে এটি ব্রুট ফোর্সের মাধ্যমে n = 3 নিয়ে কাজ করে (যা কয়েক দিন সময় নিয়েছে); এই কমপ্লেক্সের একটি প্রোগ্রাম সহ, হাত দ্বারা বিকিরণ-প্রতিরোধের জন্য পরীক্ষা করা শক্ত (এবং আমি পূর্ববর্তী সংস্করণে একটি ভুল করেছি, যার কারণেই বাইট গণনা বৃদ্ধি পেয়েছে)। শেষ আপডেট

আমি স্টাডারকে কোথাও পুনঃনির্দেশ করার পরামর্শ দিচ্ছি যা আপনি এটি দেখতে পাবেন না; আপনি যদি এর থেকে অক্ষর মুছছেন না তখনও এই প্রোগ্রামটি সন্দেহজনক সিনট্যাক্স সম্পর্কে এক ধরণের সতর্কতা তৈরি করে।

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

কার্যক্রম

দ্রষ্টব্য: _চারটি ঘটনার প্রতিটিের আগেই একটি আক্ষরিক নিয়ন্ত্রণ- অক্ষর (ASCII 31) রয়েছে -+। আমি মনে করি না এটি স্ট্যাকওভারফ্লোতে সঠিকভাবে অনুলিপি করে আটকানো হয়েছে, সুতরাং প্রোগ্রামটি চালানোর আগে আপনাকে এটি পুনরায় যুক্ত করতে হবে।

eval+<eval+<eval+<eval+(q(FoPqOlengthFoBBPP181XXVVVVJJJKKKNdoWchopJFtPDevalMODx4KNFrPIPA-MN-TUV-ZPINFsPIFoPqOI.Fo.IQNevalFoINevalIFsPZyI.Fr.IT-UPINsayDFtJqJFsKPZyPT-UFWrYrKD.DEEEEQDx6NsayDNDforB1..4YforB1..4NexitQNevalFo)=~y=A-Z=-+;-AZz-~=r)####>####>####>####>####>####>
;
;
;
;
eval+<eval+<eval+<eval+(q(FoPqOlengthFoBBPP181XXVVVVJJJKKKNdoWchopJFtPDevalMODx4KNFrPIPA-MN-TUV-ZPINFsPIFoPqOI.Fo.IQNevalFoINevalIFsPZyI.Fr.IT-UPINsayDFtJqJFsKPZyPT-UFWrYrKD.DEEEEQDx6NsayDNDforB1..4YforB1..4NexitQNevalFo)=~y=A-Z=-+;-AZz-~=r)####>####>####>####>####>####>
;
;
;
;
eval+<eval+<eval+<eval+(q(FoPqOlengthFoBBPP181XXVVVVJJJKKKNdoWchopJFtPDevalMODx4KNFrPIPA-MN-TUV-ZPINFsPIFoPqOI.Fo.IQNevalFoINevalIFsPZyI.Fr.IT-UPINsayDFtJqJFsKPZyPT-UFWrYrKD.DEEEEQDx6NsayDNDforB1..4YforB1..4NexitQNevalFo)=~y=A-Z=-+;-AZz-~=r)####>####>####>####>####>####>
;
;
;
;
eval+<eval+<eval+<eval+(q(FoPqOlengthFoBBPP181XXVVVVJJJKKKNdoWchopJFtPDevalMODx4KNFrPIPA-MN-TUV-ZPINFsPIFoPqOI.Fo.IQNevalFoINevalIFsPZyI.Fr.IT-UPINsayDFtJqJFsKPZyPT-UFWrYrKD.DEEEEQDx6NsayDNDforB1..4YforB1..4NexitQNevalFo)=~y=A-Z=-+;-AZz-~=r)####>####>####>####>####>####>
;
;
;
;

ব্যাখ্যা

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

প্রতিটি অংশটি দুটি অংশের পরিবর্তে কার্যকরভাবে কার্যকরভাবে কার্যকরভাবে পৃথক; একটি বাইরের মোড়ক এবং কিছু অভ্যন্তরীণ কোড। যেমন, আমরা তাদের আলাদাভাবে বিবেচনা করতে পারি।

বাইরের মোড়ক

বাইরের র‌্যাপারটি মূলতঃ eval<+eval<+eval< ... >####>####...>###(আরও কিছু সেমিকোলন এবং নিউলাইনগুলির একটি গুচ্ছ যার উদ্দেশ্যটি সুস্পষ্ট হওয়া উচিত; এটি নিশ্চিত করার জন্য যে কিছু সেমিকোলন বা তাদের আগে নতুন লাইনগুলি মুছে ফেলা না হলে প্রোগ্রামের অংশগুলি পৃথক থাকবে) )। এটি মোটামুটি সহজ দেখাচ্ছে, তবে এটি বেশ কয়েকটি উপায়ে সূক্ষ্ম এবং যে কারণে আমি এই চ্যালেঞ্জটির জন্য পার্লকে বেছে নিয়েছি।

প্রথমে, আসুন দেখে নেওয়া যাক কীভাবে প্রোগ্রামটির একটি অনাদায়ী কপিতে মোড়ক কাজ করে। evalঅন্তর্নির্মিত ফাংশন হিসাবে পার্স, যা একটি যুক্তি লাগে। যেহেতু একটি যুক্তি প্রত্যাশিত, +এখানে একটি অকার্যকর +(যা এখনই পার্ল গল্ফারদের কাছে খুব পরিচিত হবে; তারা আশ্চর্যজনকভাবে প্রায়শই দরকারী হয়ে আসে)। আমরা এখনও একটি যুক্তি প্রত্যাশা করছি (আমরা কেবল একটি অযৌক্তিক অপারেটরকে দেখেছি), সুতরাং <পরবর্তীটি <>অপারেটরের সূচনা হিসাবে ব্যাখ্যা করা হয় (যা কোনও উপসর্গ বা পোস্টফিক্স আর্গুমেন্ট নেয় না, এবং এভাবে অপারেন্ড অবস্থানে ব্যবহার করা যেতে পারে)।

<>মোটামুটি অদ্ভুত অপারেটর। তার স্বাভাবিক উদ্দেশ্য filehandles পড়তে, এবং আপনি filehandle নাম লিখুন ভিতরে কোণ বন্ধনী। বিকল্পভাবে, যদি ফাইলহ্যান্ডেলের নাম হিসাবে অভিব্যক্তিটি বৈধ না হয় তবে এটি গ্লোব্বিং করে (মূলত, ইউনিক্স শেলগুলি ব্যবহারকারী দ্বারা কমান্ড-লাইন আর্গুমেন্টের ক্রম হিসাবে প্রবেশ করা পাঠ্য অনুবাদ করতে ব্যবহার করে; একই সাথে পার্লের অনেক পুরানো সংস্করণ ব্যবহৃত হয় এটির জন্য শেল, তবে আজকাল পার্ল অভ্যন্তরীণভাবে গ্লোব্বিং পরিচালনা করে)। উদ্দিষ্ট ব্যবহার, সুতরাং, এর লাইনে বরাবর <*.c>, যা সাধারণত একটি তালিকা ফিরে আসে ("foo.c", "bar.c")। একটি স্কেলার প্রসঙ্গে (যেমন যুক্তি হিসাবেeval), এটি সবেমাত্র প্রথম এন্ট্রিটি দেখায় এটি প্রথমবারের মতো এটি চালিত হয় (প্রথম যুক্তির সমতুল্য), এবং অনুমানীয় ভবিষ্যতের রানগুলির ক্ষেত্রে অন্যান্য এন্ট্রিগুলি ফিরিয়ে দেয় যা কখনই ঘটে না।

এখন, শেলগুলি প্রায়শই কমান্ড-লাইন আর্গুমেন্টগুলি পরিচালনা করে; যদি আপনি -rকোনও যুক্তি ছাড়াই এর মতো কিছু দেন , তবে সেই নামটি সহ কোনও ফাইল আছে কিনা তা নির্বিশেষে এটি প্রোগ্রাম ভারব্যাটিমের কাছে পৌঁছে দেওয়া হবে। পার্ল একইভাবে কাজ করে, তাই যতক্ষণ না আমরা নিশ্চিত করি যে শেল বা পারেলের সাথে বিশেষ <এবং মিলের মধ্যে কোনও বিশেষ অক্ষর নেই >, আমরা কার্যকরভাবে স্ট্রিং আক্ষরিকের একটি বিশ্রী রূপের মতো এটি ব্যবহার করতে পারি। আরও ভাল, কোটের মতো অপারেটরদের জন্য পার্লের পার্সারের এমন বন্ধুত্বগুলি এমনকি এটির মতো প্রসঙ্গে যেখানে বন্ধুর সাথে মেলে এমন কোনও বাধ্যতামূলক প্রবণতা রয়েছে যেখানে এটি কোনও বোধগম্য নয়, তাই আমরা <>নিরাপদে বাসা বেঁধে ফেলতে পারি (যা এই প্রোগ্রামটি সম্ভব হওয়ার জন্য প্রয়োজনীয় আবিষ্কার)। এই সমস্ত নেস্টেড এর প্রধান খারাপ দিক <>হ'ল এর বিষয়বস্তু থেকে দূরে থাকা<>প্রায় অসম্ভব; প্রত্যেকটির সাথে অনস্কেপিংয়ের দুটি স্তর রয়েছে বলে মনে হয় <>, তাই তিনটির অভ্যন্তরে কিছু এড়ানোর জন্য এটির আগে 63৩ টি ব্যাকস্ল্যাশ চালানো দরকার। আমি স্থির করেছিলাম যে যদিও কোড আকারটি এই সমস্যায় কেবলমাত্র দ্বিতীয় বিবেচ্য বিষয়, তবে এটি অবশ্যই আমার স্কোরের জন্য এই ধরণের পেনাল্টি প্রদানের পক্ষে উপযুক্ত নয়, তাই আমি কেবল আক্রমণাত্মক চরিত্রগুলি ব্যবহার না করেই বাকি প্রোগ্রামটি লেখার সিদ্ধান্ত নিয়েছি।

তাহলে মোড়কের অংশগুলি মুছলে কী ঘটে?

  • শব্দটির বিলোপগুলিরeval ফলে এটি একটি খালি শব্দে রূপান্তরিত হয়, একটি অর্থহীন স্ট্রিং। পার্ল এগুলি পছন্দ করে না তবে এটি তাদের সাথে এমন আচরণ করে যেন তারা চারদিকে কোট দিয়ে ঘেরা থাকে; এইভাবে eal<+eval<+...ব্যাখ্যা করা হয়"eal" < +eval<+...। এটি প্রোগ্রামের অপারেশনে কোনও প্রভাব ফেলবে না, কারণ এটি মূলত ভারী নেস্টেড ইওলস (যা আমরা যাইহোক ব্যবহার করি না) থেকে ফলাফল গ্রহণ করে এটি একটি পূর্ণসংখ্যার কাছে কাস্ট করে, এবং এর উপর কিছু অর্থহীন তুলনা করে। (এই ধরণের জিনিসটি প্রচুর সতর্কতার স্প্যামের কারণ হিসাবে দেখা দেয় যে এটি সাধারণ পরিস্থিতিতে করা স্পষ্টত কোনও কার্যকর জিনিস নয়; আমরা কেবল এটি মুছে ফেলতে শোষণ করতে ব্যবহার করছি)) এটি আমাদের প্রয়োজনীয় বন্ধনী বন্ধনীগুলির সংখ্যা পরিবর্তন করে (কারণ উদ্বোধনী বন্ধনী পরিবর্তে এখন তুলনা অপারেটর হিসাবে ব্যাখ্যা করা হচ্ছে), তবে শেষে মন্তব্যগুলির শৃঙ্খলাটি নিশ্চিত করে যে স্ট্রিংটি যতবার বাসা বেঁধেছে না কেন নিরাপদে শেষ হবে। (এখানে #কঠোরভাবে প্রয়োজনের চেয়ে আরও বেশি লক্ষণ রয়েছে; প্রোগ্রামটি আরও সংকোচযোগ্য করার জন্য আমি এটি লিখেছিলাম, যাতে কুইন সংরক্ষণের জন্য আমাকে কম ডেটা ব্যবহার না করে))
  • যদি কোনও <মুছে ফেলা হয়, কোডটি এখন এটিকে পার্স করে eval(eval<...>)। মাধ্যমিকটির বাইরের evalকোনও প্রভাব নেই, কারণ আমরা যে প্রোগ্রামগুলি পর্যালোচনা করছি সেগুলি প্রোগ্রাম হিসাবে কোনও বাস্তব প্রভাব রয়েছে এমন কিছু ফেরত দেয় না (যদি তারা সাধারণভাবে ফিরে আসে তবে এটি সাধারণত নাল স্ট্রিং বা একটি খালি শব্দ; আরও সাধারণত তারা ফেরত দিয়ে ফিরে আসে) ব্যতিক্রম, যার ফলে evalনাল স্ট্রিং exitফেরত আসে বা কিছুটা ফিরে এড়াতে ব্যবহার করা হয়)।
  • যদি +কোনওটি মুছে ফেলা হয়, সংলগ্ন কোড অক্ষত থাকলে এর কোনও তাত্ক্ষণিক প্রভাব নেই; unary +প্রোগ্রামে কোন প্রভাব আছে। (মূলগুলি +হ'ল ক্ষতিগুলি মেরামত করতে সহায়তা করার জন্য; তারা রিলেশনাল অপারেটর হিসাবে পরিবর্তে <অ্যানারি হিসাবে ব্যাখ্যা করা পরিস্থিতিতে এমন সংখ্যা বৃদ্ধি করে যার <>অর্থ আপনার একটি অবৈধ প্রোগ্রাম তৈরি করতে আরও মুছে ফেলা প্রয়োজন))

পর্যাপ্ত মোছার সাথে মোড়কের ক্ষতি হতে পারে তবে এমন কিছু তৈরি করতে পারে যা বিশ্লেষণ করে না। চারটি মোছার সাথে, আপনি এটি করতে পারেন:

eal<evl<eval+<...

এবং পার্লে, সম্পর্কিত অপারেটর <ননসোসিয়েটিভ, এবং এইভাবে আপনি একটি সিনট্যাক্স ত্রুটি পান (একই সাথে আপনি যা করতে চান 1<2<3) get সেই হিসাবে, লিখিত হিসাবে প্রোগ্রামটির ক্যাপটি হ'ল এন = 3। আরও অবিচ্ছিন্ন +এস যুক্ত করা এটি বাড়ানোর একটি প্রতিশ্রুতিবদ্ধ উপায় বলে মনে হচ্ছে, তবে এটি ক্রমবর্ধমানভাবে তৈরি করতে চাইবে যে মোড়কের অভ্যন্তরটি খুব ভেঙে যেতে পারে, যা যাচাই করে প্রোগ্রামটির নতুন সংস্করণটি খুব কঠিন হতে পারে।

মোড়কটি এত মূল্যবান হওয়ার কারণটি হ'ল evalপার্লের ব্যতিক্রমগুলি ধরেন, যেমন (উদাহরণস্বরূপ) আপনি একটি বাক্য গঠন ত্রুটি সংকলনের চেষ্টা করার পরে যে ব্যতিক্রমটি পান। যেহেতু এটি evalএকটি স্ট্রিং আক্ষরিক, স্ট্রিংয়ের সংকলন রানটাইমের সময় ঘটে এবং আক্ষরিক সংকলন করতে ব্যর্থ হলে ফলাফল ব্যতিক্রম ধরা পড়ে। এর ফলে evalনাল স্ট্রিং ফিরে আসে এবং ত্রুটি সূচকটি সেট হয়ে যায় $@, তবে আমরা কখনই পরীক্ষা করি না (প্রোগ্রামটির কয়েকটি রূপান্তরিত সংস্করণে মাঝে মধ্যে ফিরে আসা নাল স্ট্রিংটি সম্পাদন করে)। গুরুতরভাবে, এর অর্থ হ'ল যদি ভিতরের কোডটিতে কিছু ঘটেমোড়ক, সিনট্যাক্স ত্রুটির কারণ হয়ে যায়, তারপরে মোড়কটি কোডটির পরিবর্তে কোডটি কিছুই না করে (এবং প্রোগ্রামটি নিজেই একটি অনাদায়ী কপিটি সন্ধানের প্রয়াসে চালিয়ে যাবে)। অতএব, অভ্যন্তরীণ কোডটি মোড়কের মতো তেজস্ক্রিয়তা-প্রমাণের মতো হতে হবে না; আমরা যা যত্ন নিই তা হ'ল ক্ষতিগ্রস্থ হলে এটি প্রোগ্রামের ননডামাজড সংস্করণটির সাথে একইভাবে কাজ করবে, নাহলে এটি ক্র্যাশ হয়ে যাবে ( evalব্যতিক্রমটি ধরতে এবং চালিয়ে যাওয়ার অনুমতি দেয় ) বা কোনও কিছুই প্রিন্ট না করেই স্বাভাবিকভাবে প্রস্থান করবে।

মোড়কের ভিতরে

মোড়কের অভ্যন্তরের কোডটি মূলতঃ এর মতো দেখাচ্ছে (আবারও একটি নিয়ন্ত্রণ রয়েছে _that স্ট্যাক এক্সচেঞ্জটি এর আগে অবিলম্বে প্রদর্শিত হবে না -+):

eval+(q(...)=~y=A-Z=-+;-AZz-~=r)

এই কোডটি পুরোপুরি গ্লোব-নিরাপদ অক্ষরের সাথে রচিত এবং এর উদ্দেশ্য হ'ল বিরাম চিহ্নগুলির একটি নতুন বর্ণমালা যুক্ত করা যা একটি স্ট্রিং আক্ষরিককে প্রতিলিপি এবং মূল্যায়নের মাধ্যমে একটি আসল প্রোগ্রাম লিখতে সম্ভব করে তোলে (আমরা ব্যবহার করতে পারি না 'বা "আমাদের উদ্ধৃতি হিসাবে) চিহ্নগুলি, তবে q()পার্লের স্ট্রিং গঠনের একটি বৈধ উপায়) (অপ্রকাশনীয় চরিত্রের কারণ হ'ল প্রোগ্রামে আক্ষরিক স্থানের অক্ষর ছাড়াই আমাদের মহাকাশ চরিত্রের কোনও কিছু লিখিতভাবে লিপিবদ্ধ করতে হবে; সুতরাং আমরা ASCII 31 থেকে শুরু করে একটি পরিসীমা গঠন করি এবং স্থানটিকে দ্বিতীয় শ্রেণীর উপাদান হিসাবে ধরা করি।) স্পষ্টতই, আমরা যদি লিখিত লিখনের মাধ্যমে কিছু অক্ষর তৈরি করি তবে এগুলি থেকে প্রতিবর্ণীকরণের জন্য আমাদের অক্ষর ত্যাগ করতে হবে, তবে বড় হাতের অক্ষর খুব কার্যকর নয় এবং বিরাম চিহ্নগুলিতে অ্যাক্সেস না করে অ্যাক্সেস ছাড়াই লিখতে অনেক সহজ।

এখানে বিরাম চিহ্নগুলির বর্ণমালা রয়েছে যা গ্লোবের ফলাফল হিসাবে উপলব্ধ হয় (উপরের রেখাটি এনকোডিংটি দেখায়, নিম্নরেখায় এটি অক্ষরটি অক্ষরযুক্ত করে):

BCDEFGHIJKLMNOPQRSTUVWXYZ
 ! "# $% & '() * + +; <=> @ Azz {|} ~ 

সর্বাধিক উল্লেখযোগ্যভাবে, আমাদের কাছে এমন কিছু বিরাম চিহ্ন রয়েছে যা গ্লোব-সেফ নয় তবে স্পেস ক্যারেক্টারের সাথে পার্ল প্রোগ্রাম লেখার ক্ষেত্রে কার্যকর। আমি দুটি বড় হাতের অক্ষরও সংরক্ষণ করেছি, আক্ষরিক Aএবং Z(যা তাদের কাছে এনকোড করে না, তবে Tএবং কেন U, কারণ Aউপরের পাশাপাশি নিম্ন সীমার শেষ পয়েন্ট হিসাবে প্রয়োজন ছিল); এটি আমাদেরকে নতুন এনকোডযুক্ত অক্ষর সেট ব্যবহার করে লিখিত লিখনের নির্দেশ নিজেই লেখার অনুমতি দেয় (যদিও বড় হাতের অক্ষরগুলি তেমন কার্যকর না হয় তবে এগুলি বড় হাতের অক্ষরে পরিবর্তনগুলি নির্দিষ্ট করতে কার্যকর হয়)। সবচেয়ে উল্লেখযোগ্য কিছু অক্ষর আছে যা আমরা আছে না [, \এবং ], কিন্তু তেমন কাউকে প্রয়োজন হয় (যখন আমি আউটপুটে একটি newline প্রয়োজন, আমি তা থেকে অন্তর্নিহিত সম্পর্কে newline ব্যবহার করে উত্পাদিতsayলেখার প্রয়োজনের চেয়ে \n; chr 10এছাড়াও কাজ করেছে তবে আরও ভার্জোজ)।

যথারীতি, র‍্যাটারের অভ্যন্তরে স্ট্রিংয়ের বাইরে ক্ষতিকারক হয়ে পড়লে কী হয় তা নিয়ে আমাদের চিন্তিত হওয়া উচিত। একটি দূষিত evalকিছু চলমান প্রতিরোধ করবে; আমরা এটা ঠিক আছে। যদি উদ্ধৃতি চিহ্নগুলি ক্ষতিগ্রস্থ হয়, তবে স্ট্রিংটির অভ্যন্তরটি পার্ল বৈধ নয়, এবং এভাবে মোড়কটি এটি ধরবে (এবং স্ট্রিংগুলিতে অসংখ্য বিয়োগফলের অর্থ এই যে আপনি এটি কার্যকর বৈধ পার্ল করতে পারলেও এটি কিছুই করবে না, যা এটি একটি গ্রহণযোগ্য ফলাফল)। প্রতিবর্ণের ক্ষয়ক্ষতি, যদি এটি একটি সিনট্যাক্স ত্রুটি না হয় তবে স্ট্রিংকে মূল্যায়ন করা হবে যা সাধারণত এটি একটি সিনট্যাক্স ত্রুটিতে পরিণত হয়; আমি 100% নিশ্চিত নই যে এটির কোনও ঘটনা ঘটেনি, তবে আমি এই মুহুর্তে এটি নিশ্চিত করার জন্য নিষ্ঠুর-জোর করে করছি, যদি আছে তবে এটি ঠিক করার পক্ষে যথেষ্ট সহজ হওয়া উচিত।

এনকোডেড প্রোগ্রাম

স্ট্রিং আক্ষরিক ভিতরে খুঁজছি, এনকোডিং আমি ব্যবহার করত এবং যোগ হোয়াইটস্পেস reversing এটি আরো পাঠযোগ্য করতে, আমরা এই (আবার, আগে একটি কন্ট্রোল- আন্ডারস্কোর কল্পনা পেতে -+যা এনকোড করা হয়, A):

$o=q<
  length$o  ==181 || zzzz((()));
  do {
    chop ($t = "eval+<"x4);
    $r = '=-+;-AZz-~=';
    $s = '$o=q<' . $o . '>;eval$o';
    eval '$s=~y' . $r . 'A-Z=';
    say "$t(q($s)=~y=A-Z${r}r)" . "####>"x6;
    say ";" for 1..4
  } for 1..4;
  exit>;
eval $o

লোকেরা যারা কুইনে অভ্যস্ত তারা এই সাধারণ কাঠামোটি চিনবে। সর্বাধিক গুরুত্বপূর্ণ অংশটি শুরুতে রয়েছে, যেখানে আমরা যাচাই করি যে $ o অবনমিত নয়; যদি অক্ষর মুছে দেওয়া হয়েছে, তার দৈর্ঘ্য মেলে না হবে 181, তাই আমরা চালানো zzzz((()))যা, তা অপ্রতিম বন্ধনী কারণে একটি বাক্য গঠন ত্রুটি নয়, এমনকি যদি আপনি কারণ কেউ এর কোন তিনটি অক্ষর মুছে ফেলতে একটি রানটাইম এরর হতে হবে zzzz, zzz, zz, এবং zএটি একটি ফাংশন, এবং মুছে ফেলা (((এবং একটি অযৌক্তিক সিনট্যাক্স ত্রুটি ঘটানো ব্যতীত অন্য কোনও ক্রিয়াকলাপ হিসাবে পার্সিং প্রতিরোধের উপায় নেই । চেক নিজেই ক্ষতির প্রতিরোধী; এর ||ক্ষতি হতে |পারে তবে zzzz((()))কলটি নিঃশর্তভাবে চলতে পারে; ভেরিয়েবল বা ধ্রুবকগুলির ক্ষতিকারক একটি অমিল ঘটায় কারণ আপনি একটির সাথে তুলনা করছেন 0,180, 179, 178এর সংখ্যা কিছু উপসেট থেকে সমতার জন্য 181; এবং একটি অপসারণের =ফলে পার্স ব্যর্থতা দেখা দেয় এবং দু'জনই =অনিবার্যভাবে এলএইচএসকে পূর্ণসংখ্যা 0 বা একটি নাল স্ট্রিংকে মূল্যায়িত করে, উভয়ই মিথ্যা।

আপডেট : প্রোগ্রামটির পূর্ববর্তী সংস্করণে এই চেকটি কিছুটা ভুল ছিল, সুতরাং সমস্যাটি সমাধানের জন্য আমাকে এটি সম্পাদনা করতে হয়েছিল। পূর্ববর্তী সংস্করণটি ডিকোডের পরে দেখে মনে হয়েছিল:

length$o==179||zzzz((()))

এবং এটি পেতে প্রথম তিনটি বিরাম চিহ্ন মুছে ফেলা সম্ভব হয়েছিল:

lengtho179||zzz((()))

lengtho179খালি শব্দ হওয়া সত্যবাদী এবং এভাবে চেকটি ভেঙে যায়। আমি অতিরিক্ত দুটি Bঅক্ষর (যা স্থানের অক্ষরগুলিকে এনকোড করে) যুক্ত করে এটি স্থির করেছি, অর্থাত কুইনের সর্বশেষতম সংস্করণ এটি করে:

length$o  ==181||zzzz((()))

এখন সিনট্যাক্স ত্রুটি তৈরি না করে =চিহ্ন এবং চিহ্ন দুটিই আড়াল করা অসম্ভব $। (আমাকে একের পরিবর্তে দুটি স্পেস যোগ করতে হয়েছিল কারণ দৈর্ঘ্যের উত্সটিতে 180একটি আক্ষরিক 0চরিত্র তৈরি হবে, যা এই প্রসঙ্গে অপব্যবহার করা যেতে পারে একটি খালি শব্দটির সাথে শূন্যের পূর্ণসংখ্যার তুলনা করতে, যা সফল হয়)) শেষ আপডেট

দৈর্ঘ্যের চেকটি পাস করার পরে, আমরা জানি যে অনুলিপিটি অনাদৃশ্যযুক্ত, কমপক্ষে এটি থেকে চরিত্র মোছার ক্ষেত্রে, সুতরাং এগুলি সমস্ত কিছু কেবল সরলভাবে খাড়া করা (কোনও বিশৃঙ্খল ডিকোডিং টেবিলের কারণে বিরাম চিহ্নগুলির বিকল্পগুলি এই চেকটি ধরা পড়বে না) , তবে আমি ইতিমধ্যে নিষ্ঠুর- বাধ্যতার মাধ্যমে যাচাই করেছি যে কেবল ডিকোডিং টেবিল থেকে কোনও তিনটি মুছে ফেলা কুইনটি ভেঙে দেয়; সম্ভবত তাদের বেশিরভাগই সিনট্যাক্স ত্রুটির কারণ হয়ে থাকে)। আমাদের $oইতিমধ্যে একটি চলক রয়েছে, সুতরাং আমাদের যা করতে হবে তা হ'ল বাইরের র‌্যাপারগুলিকে হার্ডকোড করতে হবে (কিছুটা কম ডিগ্রি সংকোচনের সাথে; আমি প্রশ্নের অংশটি পুরোপুরি এড়িয়ে যাইনি )। একটি কৌশলটি হ'ল আমরা প্রচুর পরিমাণে এনকোডিং টেবিলটি সঞ্চয় করি$r; আমরা অভ্যন্তরীণ মোড়কের এনকোডিং টেবিল বিভাগটি তৈরি করতে, বা এর চারপাশে কিছু কোড যুক্ত করতে এবং evalএটি বিপরীতে ডিকোডিং প্রক্রিয়াটি চালানোর জন্য (us o এর এনকোড সংস্করণটি কী তা নির্ধারণের জন্য আমাদের অনুমতি দিতে) এটি আক্ষরিকভাবে মুদ্রণ করতে পারি , এই পয়েন্টে কেবল ডিকোড করা সংস্করণ উপলব্ধ রয়েছে) available

অবশেষে, আমরা যদি একটি অক্ষত অনুলিপি হয়ে থাকি এবং এভাবে পুরো মূল প্রোগ্রামটি আউটপুট করতে পারি, exitতবে অন্যান্য অনুলিপিগুলিও প্রোগ্রামটি মুদ্রণের চেষ্টা করতে বাধা দেওয়ার জন্য আমরা কল করি ।

যাচাই স্ক্রিপ্ট

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

use 5.010;
use IPC::Run qw/run/;
undef $/;
my $program = <>;
my $min = 1;
my $max = (length $program) / 4 - 3;
for my $x ($min .. $max) {
    for my $y ($x .. $max) {
        for my $z ($y .. $max) {
            print "$x, $y, $z\n";
            my $p = $program;
            substr $p, $x, 1, "";
            substr $p, $y, 1, "";
            substr $p, $z, 1, "";
            alarm 4;
            run [$^X, '-M5.010'], '<', \$p, '>', \my $out, '2>', \my $err;
            if ($out ne $program) {
                print "Failed deleting at $x, $y, $z\n";
                print "Output: {{{\n$out}}}\n";
                exit;
            }
        }
    }
}

say "All OK!";

3
ওপি কিছুটা অস্পষ্ট; তবে আমি ভেবেছিলাম স্কোরটি (1116 * 1116) / 3 হবে।
গ্রেগ মার্টিন

@ গ্রেগমার্টিন: (1116 * 1116) / 3 হল 415152, সুতরাং এই প্রবেশিকাটি এখনও সেই পরিস্থিতিতে জিততে পারে। তবে আমি মনে করি না যে ওপিটির অর্থ এর অর্থ হতে পারে কারণ এটি একাধিক অক্ষর অপসারণ পরিচালনা করতে সক্ষম হওয়ার জন্য খুব কম উত্সাহ প্রদান করবে। এই কুইনটি দৈর্ঘ্যের অর্ধেকেরও কম হতে পারে যদি আপনার কেবল একটি চরিত্র অপসারণ পরিচালনা করতে হয়; এটি আমাকে স্কোরের জন্য কার্যকর ÷ 4 দেবে যদি আমরা এটির মতো ব্যাখ্যা করি, যা আমি এন = 3 থেকে প্রাপ্ত ÷ 3 কে ছাড়িয়ে যাব এবং এর অর্থ এটি হ'ল কম আকর্ষণীয় এন = 1 এন্ট্রি আসলে আরও ভাল স্কোরিং।

2
আমি স্কোরিং আরও পরিষ্কার করে দিয়েছি। যাইহোক, এটি একেবারে অবিশ্বাস্য;
ভাবেননি

1
পার্ল সম্পর্কে এটি কিছু বলেছে যে বিরামচিহ্ন ছাড়াই অক্ষর ছাড়াই একটি প্রোগ্রাম লেখা সহজ
রবার্ট ফ্রেজার

35

বেফুঞ্জ -98 , 884, এন = 14, স্কোর ≈ 2.636

f00f00f00f00f00f00f00f00f00f00f00f00f00f00f0xxxxxxxxxxxxxxx"""""""""""""""fffffffffffffff'''''''''''''''000000000000000\\\\\\\\\\\\\\\'''''''''''''''000000000000000\\\\\\\\\\\\\\\'''''''''''''''fffffffffffffff\\\\\\\\\\\\\\\111111111111111---------------:::::::::::::::!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000000000000000aaaaaaaaaaaaaaa---------------bbbbbbbbbbbbbbb---------------***************jjjjjjjjjjjjjjj$$$$$$$$$$$$$$$'''''''''''''''+++++++++++++++kkkkkkkkkkkkkkk,,,,,,,,,,,,,,,333333333333333kkkkkkkkkkkkkkk$$$$$$$$$$$$$$$000000000000000{{{{{{{{{{{{{{{'''''''''''''''888888888888888uuuuuuuuuuuuuuu'''''''''''''''!!!!!!!!!!!!!!!111111111111111+++++++++++++++'''''''''''''''xxxxxxxxxxxxxxx###############;;;;;;;;;;;;;;;:::::::::::::::!!!!!!!!!!!!!!!kkkkkkkkkkkkkkk@@@@@@@@@@@@@@@dddddddddddddddkkkkkkkkkkkkkkk:::::::::::::::eeeeeeeeeeeeeeekkkkkkkkkkkkkkk,,,,,,,,,,,,,,,;;;;;;;;;;;;;;;

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

আপনি ঠিক ১৪ টি অক্ষর মুছে ফেললে এটি কার্যকর হয় না, আপনি 14 অক্ষর পর্যন্ত কোনও পরিমাণ সরিয়ে ফেলেন এমন কি না ।

n = 14খুব স্বেচ্ছাসেবী পছন্দ বলে মনে হতে পারে তবে আমি যে কৌশলটি ব্যবহার করেছি তা কেবলমাত্র 1 থেকে 14 এর মধ্যে রেডিয়েশন-কড়া করার আদেশের জন্য ব্যবহার করা যেতে পারে তবে সহজেই এর বাইরে নয় (এটি সম্ভব হতে পারে তবে কীভাবে আমার কোনও ধারণা নেই)। অর্ডার -১ কুইনটি কেবলমাত্র 73 বাইট (যদিও এটি কিছু গল্ফিং ট্রিকস ব্যবহার করে যা বৃহত্তর ক্ষেত্রে প্রযোজ্য নয় n):

200 20 xx""''ÈÈ..aa22**..33kk$$00{{''!!uu''!!11++''xx##;;::!!kk@@::,,,,;;

ব্যাখ্যা

আমি যখন এই উত্তরের উপর কাজ করছিলাম তখন আমি জানতে পেরেছিলাম যে (2,0)নিম্নলিখিত নির্দেশকটির সাথে রেডিয়েশন-কড়া অবস্থার মধ্যে নির্দেশিকা পয়েন্টারের ডেল্টা স্থাপন করা সম্ভব :

20020xx

কেন এটি কাজ করে তার জন্য উত্তরটি দেখুন। আমি এটি হাতের মুঠোয় কিছুটা দিয়ে পেয়েছি, কিন্তু এটি এই প্রশ্ন উত্থাপন করেছে যে একই ধরণের নিদর্শনগুলি রয়েছে যা একাধিক অক্ষর অপসারণের অধীনে শক্তিশালী whether তাই আমি নিষ্ঠুর বল দ্বারা এগুলি অনুসন্ধান করার জন্য একটি ছোট ম্যাথমেটিক স্ক্রিপ্ট লিখেছিলাম:

n = 14;
m = 4;
Print @ FromDigits @ {
      m + 1, 0, 
      ## & @@ ((m + 1) IntegerDigits[#, 2, n - 4]),
      m + 1, 0
} & /@ Select[
   Range[0, 2^(n - 4) - 1], 
   AllTrue[
     Subsets[{
         m + 1, 0, 
         ## & @@ ((m + 1) IntegerDigits[#, 2, n - 4]),
         m + 1, 0
       }, 
       {n - m, n - 1}
     ] //. {a___, _, m + 1} | {a___, 0, _} :> {a}, 
     MatchQ@{___, m + 1, 0}
  ] &
];

এটি খুব দ্রুত একটি প্যাটার্ন প্রকাশ করেছে। একটি সংশ্লিষ্ট স্নিপেট যা আপ অপসারণের জন্য কাজ করে পেতে nঅক্ষর, আপনি ব্যবহার করতে পারেন (m0x){n}m0যেখানে mহয় n+1এবং xহয় mবা 0। সুতরাং নীচের সমস্তগুলি দুটি অক্ষর পর্যন্ত অপসারণের জন্য কাজ করবে:

30030030
30030330
30330030
30330330

আমি নিশ্চিত এটা এই প্রমান করে দেখানো সম্ভব, কিন্তু আমি কেবল যাচাই করেছি nপর্যন্ত 7। অবশ্যই, এটি কেবল ততক্ষণ কাজ করে যতক্ষণ আমরা n+1একক অঙ্ক হিসাবে প্রতিনিধিত্ব করতে পারি , এবং বেফুঞ্জ 98-এ এই জাতীয় বৃহত্তম সংখ্যাটি f15 প্রতিনিধিত্ব করে That's তাই আমার দৃষ্টিভঙ্গি সীমাবদ্ধ n = 14। যদি কেউ বিশ্বাসযোগ্যভাবে বদ্বীপটিকে আরও বড় আকারে সেট করার উপায় খুঁজে পায় n+1তবে সম্ভবত এই বিকিরণ-কড়া কুইনের ক্রমটি অনির্দিষ্টকালের জন্য বাড়ানো সম্ভব হবে।

আসল কোডটি দেখুন। এটির মূলত দুটি অংশ রয়েছে। আমি প্রথমে ডেল্টাটি সেট (15,0)করেছিলাম যেমন আমি উল্লেখ করেছি:

f00f00f00f00f00f00f00f00f00f00f00f00f00f00f0xxxxxxxxxxxxxxx

এবং কোডের বাকী প্রতিটি কমান্ড 15 বার পুনরাবৃত্তি করেছে এবং উত্সটি মুদ্রণ করে। আমরা যদি পুনরাবৃত্তি সরিয়ে ফেলি, তবে এটির মতো দেখাচ্ছে:

"f'0\'0\'f\1-:!!0a-b-*j$'+k,3k$0{'8u'!1+'x#;:!k@dk:ek,;

"একটি প্রমিত 2D quining কৌশল: এটি স্ট্রিং মোড আরম্ভ, সমস্ত অক্ষর (নিজেই ব্যতীত) স্ট্যাক এবং প্রান্ত স্ট্রিং মোড সম্মুখের আবার কাছাকাছি মোড়কে পর push কর্মের। এটি আমাদের দ্বিতীয়ার্ধের সমস্ত কোড পয়েন্ট পেতে সহায়তা করে, তবে এটি আমাদের প্রথমার্ধ থেকে কোনও কার্যকর কিছু পেতে ব্যর্থ হবে, কারণ পুরোটি জুড়ে f00f00...f0, এটি কেবলমাত্র দুটি অক্ষর রেকর্ড করবে (যা হতে পারে fবা কোনও 0অক্ষর মুছে ফেলা হয়েছে তার উপর নির্ভর করে) )। কিন্তু যেহেতু সেই অংশটি 15 বার অক্ষর দ্বারা তৈরি করা হয়নি, তাই আমাদের অন্যভাবে এটি আলাদাভাবে মুদ্রণ করা দরকার।

আরো সুবিধামত, অপরিবর্তিত quine এ, স্ট্রিং এর দৈর্ঘ্য সামনে "হয় -1 (mod 15)। এটি গ্যারান্টি দেয় যে আমরা যতগুলি অক্ষর (14 পর্যন্ত) সরিয়ে দেই না কেন, সেখানে রেকর্ড করা অক্ষরের সংখ্যা সর্বদা 3 (এক xএবং দুটি fএবং এর 0) থাকে। 14 পর্যন্ত কোনও রেডিয়েশনের অর্ডারের জন্য এটি সত্য actually

আমরা এখন f00f00...f0অংশটি মুদ্রণের মাধ্যমে শুরু করি :

f'0\'0\'f\1-:!!0a-b-*j$'+k,

f          Push 15, a loop counter.
'0\'0\'f\  Put "00f" underneath the loop counter.
1-         Decrement the loop counter.
:!!        Copy it, and turn it into a 1 if it's positive.
0a-b-      Push -21.
*          Multiply by 0 if the loop counter is zero, or by 1 otherwise.
j          Jump that many steps. If the value was 0, this is a no-op and
           the loop ends. Otherwise, this brings us back after the f.
$          Pop the loop counter (which is now 0).
'+k,       Print the top of the stack 43 times, which gives us all of
           the "f00f00...f0" and leaves one "0" on top of the stack.

পরবর্তীটি 3k$কেবল প্রোগ্রামটিকে শুরু করার সময় থেকেই 0ধাক্কা খাওয়ার পাশাপাশি সেই তিনটি অক্ষর বাতিল করে দেয় "। স্ট্যাকটিতে এখন কেবল অক্ষর রয়েছে "পাশাপাশি f00f00...f0অক্ষরগুলি মুছে ফেলা হয়েছে তার উপর নির্ভর করে মূল থেকে নীচে কিছু জাঙ্ক রয়েছে ।

এখন আমাদের কেবল স্ট্যাকের শীর্ষটি (বাকি অক্ষরগুলি সমন্বিত) বিপরীত করতে হবে এবং তাদের প্রতিটিকে 15 বার মুদ্রণ করতে হবে।

0{     Start a new, empty stack. This pushes two zeros onto the original stack.
'8u    Move the top 56 values from the original stack to the new one, which
       is the 54 characters after the " as well as those two zeros. This is
       implemented as pop-push loop, so it reverses the order of those elements.
'!1+   Push a " by incrementing a !.
'x     Push an x. Now we've got all the characters that are repeated 15 times.
#;     Enter a loop. This is a standard technique for Befunge-98: the ; is
       a bit like a comment character, that ignores everything until the next
       ;, but we jump over the first one with #, so that from now on only
       the code inside will be executed (over and over).
  :!     Copy the top of the stack, and compute logical NOT (1 if 0, 0 otherwise).
  k@     Terminate the program that many times (i.e. when the top of the
         stack is zero).
  dk:    Make 14 copies of the top of the stack.
  ek,    Print 15 characters from the top of the stack.
;

এবং এটাই. :)


16

জাভাস্ক্রিপ্ট (ES6), 927 বাইট, এন = 1, স্কোর = 859329

দ্রষ্টব্য: এটি চালানোর জন্য কোনও REPL (ব্রাউজার কনসোলের মতো) ব্যবহার করবেন না।

কোড দৈর্ঘ্যের একটি উপাদান হওয়ার আগে এটি লেখা হয়েছিল, সুতরাং এটি এখনও গল্ফ হয় নি।

এটি খুব কঠিন ছিল , এবং এর বিশদ ব্যাখ্যার প্রাপ্য। যা আমি পরে লিখব, আমি এই চ্যালেঞ্জটি আরও কিছুটা অন্বেষণ করার পরে!

etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;
setTimeout
`c="function f(){x=String.fromCharCode(96);n=String.fromCharCode(10);q=String.fromCharCode(34);y='etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;'+n;z='setTimeout'+n+x+'c='+q+f+';f();_=1'+q+';if(window._);else if(c.length>339)eval(c)//'+x+'///'+x+n+n;console.log(y+z+z)};f();_=1";if(window._);else if(c.length>339)eval(c)//`///`

setTimeout
`c="function f(){x=String.fromCharCode(96);n=String.fromCharCode(10);q=String.fromCharCode(34);y='etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;'+n;z='setTimeout'+n+x+'c='+q+f+';f();_=1'+q+';if(window._);else if(c.length>339)eval(c)//'+x+'///'+x+n+n;console.log(y+z+z)};f();_=1";if(window._);else if(c.length>339)eval(c)//`///`

দ্রষ্টব্য: একটি ট্রেলিং নিউলাইন রয়েছে

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

দ্বিতীয় এবং তৃতীয় ব্লকগুলি ঠিক সমান। যদি _কোনওটি সমাপ্তির দিকে চলে যায় তবে এটি ভেরিয়েবলটি সেট করে যাতে অন্য কোয়েনটির সদৃশ করতে না জানে। যদি এইগুলির মধ্যে একটি ব্লক ত্রুটিযুক্ত হয়ে যায়, তবে এটি অন্য ব্লককে প্রভাবিত করে না কারণ এটিকে অবিচ্ছিন্নভাবে বলা হয়েছিল setTimeout। ত্রুটিটি _সেট না করার কারণ হবে , সুতরাং অন্য ব্লকটি সফলভাবে কুইন হবে। প্রধান কোডটি একটি স্ট্রিংয়ে রয়েছে, যাতে কোনও অপসারণ নেই কিনা তা নিশ্চিত করতে প্রতিটি ব্লকের দৈর্ঘ্যের জন্য পরীক্ষা করা হয়।

টেম্পলেট স্ট্রিংয়ের শেষে কিছু মন্তব্য সহ পরবর্তী লাইনে টেম্পলেট স্ট্রিংগুলি কোডটিকে ত্রুটি থেকে রক্ষা করে যদি টেম্পলেট স্ট্রিং গঠনের ব্যাকটিকগুলির মধ্যে একটি সরানো হয়। যদি শেষের ব্যাকটিকটি সরিয়ে ফেলা হয়, তবে টেমপ্লেট স্ট্রিংটি মন্তব্যটিতে ব্যাকটিক দিয়ে শেষ হবে। যদি প্রারম্ভিক ব্যাকটিকটি সরিয়ে ফেলা হয়, সেটটাইমআউটটি একটি আনসাইন্ড করা ফাংশন (একটি অপ-অপ) হিসাবে মূল্যায়ন করা হয় এবং কোডটি সেটটাইমআউট ছাড়াই স্বাভাবিক হিসাবে চলে। শেষের ব্যাকটিকটি অন্য একটি মন্তব্য দ্বারা বাতিল করা হয়েছে।


তুমি কি বলো? আপনি এটি ব্যবহার করে দেখতে চান? আর বলো না!

পূর্ণ পৃষ্ঠা মোড প্রস্তাবিত।

ইনপুট বাক্স উপেক্ষা করুন, এই স্নিপেট কোনও ইনপুট নেয় না।

কোড থেকে যে কোনও একটি অক্ষর অপসারণ করার চেষ্টা করুন!

বিশ্বাস করবেন না? সাধারণ কোডটি এখনও কাজ করবে (তবে এটি কুইন হবে না ...) এরকম কিছু চেষ্টা করুন console.log(5)!

দ্রষ্টব্য: স্ন্যিপেটটি আরএপিএল বৈশিষ্ট্যটি অক্ষম করতে কিছুটা সংশোধন করতে হয়েছিল, তাই আমি কেবলমাত্র এই উত্তরের জন্য একাধিক আউটপুট ক্ষমতা সরিয়েছি।

etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;
setTimeout
`c="function f(){x=String.fromCharCode(96);n=String.fromCharCode(10);q=String.fromCharCode(34);y='etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;'+n;z='setTimeout'+n+x+'c='+q+f+';f();_=1'+q+';if(window._);else if(c.length>339)eval(c)//'+x+'///'+x+n+n;console.log(y+z+z)};f();_=1";if(window._);else if(c.length>339)eval(c)//`///`

setTimeout
`c="function f(){x=String.fromCharCode(96);n=String.fromCharCode(10);q=String.fromCharCode(34);y='etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;'+n;z='setTimeout'+n+x+'c='+q+f+';f();_=1'+q+';if(window._);else if(c.length>339)eval(c)//'+x+'///'+x+n+n;console.log(y+z+z)};f();_=1";if(window._);else if(c.length>339)eval(c)//`///`
<!--                               Try the test suite below!                              --><strong id="bytecount" style="display:inline; font-size:32px; font-family:Helvetica"></strong><strong id="bytediff" style="display:inline; margin-left:10px; font-size:32px; font-family:Helvetica; color:lightgray"></strong><br><br><pre style="margin:0">Code:</pre><textarea id="textbox" style="margin-top:5px; margin-bottom:5px"></textarea><br><pre style="margin:0">Input:</pre><textarea id="inputbox" style="margin-top:5px; margin-bottom:5px"></textarea><br><button id="testbtn">Test!</button><button id="resetbtn">Reset</button><br><p><strong id="origheader" style="font-family:Helvetica; display:none">Original Code Output:</strong><p><div id="origoutput" style="margin-left:15px"></div><p><strong id="newheader" style="font-family:Helvetica; display:none">New Code Output:</strong><p><div id="newoutput" style="margin-left:15px"></div><script type="text/javascript" id="golfsnippet">var bytecount=document.getElementById("bytecount");var bytediff=document.getElementById("bytediff");var textbox=document.getElementById("textbox");var inputbox=document.getElementById("inputbox");var testbtn=document.getElementById("testbtn");var resetbtn=document.getElementById("resetbtn");var origheader=document.getElementById("origheader");var newheader=document.getElementById("newheader");var origoutput=document.getElementById("origoutput");var newoutput=document.getElementById("newoutput");textbox.style.width=inputbox.style.width=window.innerWidth-50+"px";var _originalCode=null;function getOriginalCode(){if(_originalCode!=null)return _originalCode;var allScripts=document.getElementsByTagName("script");for(var i=0;i<allScripts.length;i++){var script=allScripts[i];if(script.id!="golfsnippet"){originalCode=script.textContent.trim();return originalCode}}}function getNewCode(){return textbox.value.trim()}function getInput(){try{var inputText=inputbox.value.trim();var input=eval("["+inputText+"]");return input}catch(e){return null}}function setTextbox(s){textbox.value=s;onTextboxChange()}function setOutput(output,s){output.innerHTML=s}function addOutput(output,data){output.innerHTML='<pre style="background-color:'+(data.type=="err"?"lightcoral":"lightgray")+'">'+escape(data.content)+"</pre>"}function getByteCount(s){return(new Blob([s],{encoding:"UTF-8",type:"text/plain;charset=UTF-8"})).size}function onTextboxChange(){var newLength=getByteCount(getNewCode());var oldLength=getByteCount(getOriginalCode());bytecount.innerHTML=newLength+" bytes";var diff=newLength-oldLength;if(diff>0){bytediff.innerHTML="(+"+diff+")";bytediff.style.color="lightcoral"}else if(diff<0){bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgreen"}else{bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgray"}}function onTestBtn(evt){origheader.style.display="inline";newheader.style.display="inline";setOutput(newoutput,"");setOutput(origoutput,"");var input=getInput();if(input===null){addOutput(origoutput,{type:"err",content:"Input is malformed. Using no input."});addOutput(newoutput,{type:"err",content:"Input is malformed. Using no input."});input=[]}doInterpret(getNewCode(),input,function(data){addOutput(newoutput,data)});doInterpret(getOriginalCode(),input,function(data){addOutput(origoutput,data)});evt.stopPropagation();return false}function onResetBtn(evt){setTextbox(getOriginalCode());origheader.style.display="none";newheader.style.display="none";setOutput(origoutput,"");setOutput(newoutput,"")}function escape(s){return s.toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}window.alert=function(){};window.prompt=function(){};function doInterpret(code,input,cb){var workerCode=interpret.toString()+";function stdout(s){ self.postMessage( {'type': 'out', 'content': s} ); }"+" function stderr(s){ self.postMessage( {'type': 'err', 'content': s} ); }"+" function kill(){ self.close(); }"+" self.addEventListener('message', function(msg){ interpret(msg.data.code, msg.data.input); });";var interpreter=new Worker(URL.createObjectURL(new Blob([workerCode])));interpreter.addEventListener("message",function(msg){cb(msg.data)});interpreter.postMessage({"code":code,"input":input});setTimeout(function(){interpreter.terminate()},1E4)}setTimeout(function(){getOriginalCode();textbox.addEventListener("input",onTextboxChange);testbtn.addEventListener("click",onTestBtn);resetbtn.addEventListener("click",onResetBtn);setTextbox(getOriginalCode())},100);function interpret(code,input){_=undefined;window={};alert=function(s){stdout(s)};window.alert=alert;console.log=alert;prompt=function(s){if(input.length<1)stderr("not enough input");else{var nextInput=input[0];input=input.slice(1);return nextInput.toString()}};window.prompt=prompt;(function(){try{_=undefined;eval(code);if(typeof evalResult=="disabled_function_evaluation"){var callResult=evalResult.apply(this,input);if(typeof callResult!="undefined")stdout(callResult)}}catch(e){stderr(e.message)}})()};</script>

আরও ভাল ব্যাখ্যা আসন্ন। এরই মধ্যে বিনা দ্বিধায় যেকোন মন্তব্য / প্রশ্ন / সমালোচনা নিয়ে @ জরিচকে চ্যাট করুন!


আহ ঠিক আছে, উফফফ: |
ডাউনগোট

4
thisপরিবর্তে ব্যবহার করুন window
মামা ফান রোল

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