থামানো সমস্যা সমাধানের জন্য আমার প্রচেষ্টাকে বিস্মিত করুন


31

দয়া করে নোট করুন: এর প্রকৃতি অনুসারে, এই চ্যালেঞ্জের জন্য অনুমিতিটি বোঝা কঠিন। এটির জন্য কমপ্যুটিবিলিটি থিওরি বা সমমানের পটভূমি পঠনের কমপক্ষে একটি নতুন কোর্স প্রয়োজন। উপরন্তু, চ্যালেঞ্জ নিজেই বরং কঠিন। এর উত্তর দেওয়ার জন্য আপনার পছন্দের ভাষার কিছু উপসেটের জন্য একটি সম্পূর্ণ দোভাষী লিখতে হবে এবং কেবল এটিই নয় তবে দোভাষীকেও কুইনের মতো কিছু আকারে থাকতে হবে। আপনার উত্তরটি যদি এই সমস্ত কিছু না করে থাকে তবে অনুমানটি পূরণ না করা প্রায় নিশ্চিত।

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

আমি প্রতিশ্রুতিটি পূরণ করে এমন প্রথম উত্তরের জন্য 500 পয়েন্টের অনুদানের প্রতিশ্রুতি দিয়েছি এবং এটি জো কিং এর বিএফ উত্তরে পুরস্কৃত করা হবে ।

চ্যালেঞ্জ

থামানো সমস্যার অবিশ্বাস্যতার প্রমাণ অ্যালান টুরিংয়ের একটি মোটামুটি, সরলিকৃত সংস্করণ এরকম কিছু ঘটে:

মনে করুন আমি একটি প্রোগ্রাম লিখেছি Fযা থামানো প্রোগ্রামটি সমাধান করার জন্য। এটি হ'ল, Fঅন্য প্রোগ্রামের উত্স কোডটিকে ইনপুট হিসাবে গ্রহণ করে এবং যদি থামানো হয় এবং অন্যথায় অন্যথায় F(G)ফিরে আসে ।1G0

তবে আমি যদি আপনাকে আমার প্রোগ্রামটি Fদিয়ে থাকি তবে আপনি অন্য প্রোগ্রামটি তৈরি করতে পারেন H, যা আমার প্রোগ্রামটিকে Hএর ইনপুট হিসাবে চালায় । যদি F(H)ফেরত দেয় 0তবে Hফিরে আসে 0, তবে অন্যথায় এটি ইচ্ছাকৃতভাবে অসীম লুপে যায়। এটি একটি প্যারাডক্সের দিকে পরিচালিত করে এবং আমাদের উপসংহারে পৌঁছাতে হবে যে Fথামার সমস্যাটি সর্বোপরি সমাধান করতে পারে না।

আপনার কাজটি প্রোগ্রামটি লেখা H, তবে একটি মোড় দিয়ে: আমি আপনাকে আমার প্রোগ্রামটি দেব না। পরিবর্তে, আপনার প্রোগ্রামটি একটি ইনপুট হিসাবে আমার প্রোগ্রামের উত্স কোডটি গ্রহণ করবে। এটাই:

  • আপনার প্রোগ্রামটি উত্স কোড ফর্ম হিসাবে আমার প্রোগ্রামটিকে একটি ইনপুট হিসাবে গ্রহণ করবে । (যেমন ফাইল হিসাবে বা কমান্ড লাইন ইনপুট হিসাবে, বিশদটি আপনার উপর নির্ভর করে))

  • আমার প্রোগ্রামটি আপনার প্রোগ্রাম হিসাবে একই ভাষায় লেখা হবে এবং উত্স কোড স্ট্রিং আকারে ইনপুট নেয়।

  • তাহলে আমার প্রোগ্রাম আয় 0যখন দেওয়া আপনার প্রোগ্রাম ইনপুট হিসাবে, আপনার প্রোগ্রাম বন্ধ করা উচিত (এবং বিনিময়ে 0) যখন দেওয়া আমার প্রোগ্রাম ইনপুট হিসাবে। ("পুনরুদ্ধার 0" এর সঠিক অর্থ আপনার উপর নির্ভর করে ।)

  • যদি আমার প্রোগ্রামটি থামে না, বা যদি 0আপনার প্রোগ্রামটিকে ইনপুট হিসাবে দেওয়া ব্যতীত অন্য কোনও কিছু ফিরে আসে তবে আপনার প্রোগ্রামটি অনির্দিষ্টকালের জন্য চলতে থাকবে।

মোড়টি হ'ল, একে একে আরও শক্ত করতে কেবল নিম্নলিখিত নিয়মগুলি মেনে চলতে হবে:

  1. আপনি কোনও ধরণের বিল্ট-ইন execবা- evalটাইপ ফাংশন ব্যবহার করতে পারবেন না ।

  2. আপনি নিজের প্রোগ্রামের উত্স কোড পেতে কোনও "প্রতারণামূলক" পদ্ধতি ব্যবহার করতে পারবেন না। (যেমন আপনি "প্রোগ্রাম" নামক কোনও ফাইলে এটি সংরক্ষণ করুন open(program)এবং আপনার প্রোগ্রামে রাখতে পারবেন না have )

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

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

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

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


দ্রষ্টব্য: এই চ্যালেঞ্জটি মূলত হিসাবে পোস্ট করা হয়েছিল , তবে এটি "উদ্দেশ্যমূলক বিজয়ী মানদণ্ড" না থাকার কারণে 2016 সালে এটি বন্ধ হয়ে গিয়েছিল এবং আমি এটি আবার চালু করার জন্য পরিবর্তন করেছি । যাইহোক, আমি লক্ষ্য করেছি যে, জানুয়ারী 2018 থেকে, গুলি না PPCG নিষিদ্ধ আসলে (সঙ্গে আছে এই তাই প্রথম স্থানে বন্ধের সাইটে নীতি বিপক্ষে সাম্প্রতিকতম মেটা আলোচনা হচ্ছে)। আমি বুঝতে পারি যে আজকাল পপকনগুলি জনপ্রিয় নয়, তবে এটি একটি পুরানো চ্যালেঞ্জ, এবং এর প্রকৃতিটি জন্য এটি সত্যিই অনুপযুক্ত করে তোলেস্কোরিং সিস্টেম যদি এখনও কেউ দৃ strongly়ভাবে অনুভব করে যে এটির অনুমতি দেওয়া উচিত নয় তবে নিকটস্থ ভোটগুলি প্রায় ছড়িয়ে দেওয়া শুরু করার আগে আসুন একটি মেটা আলোচনা করা যাক। শেষ অবধি, যে কেউ শেষ বছর তাদের সমাধানটি গলফ করার চেষ্টা করে ব্যয় করেছিল, তা নিশ্চিত করে বলুন যে এই চ্যালেঞ্জের ক্ষেত্রে এটি ঠিক ততটাই প্রতিযোগিতামূলক হবে, এবং ঠিক ততটুকু অনুগ্রহের যোগ্য হবে, যেমনটি থাকত সংস্করণ।


1
ফিরে এসে, আপনি কি প্রস্থান কোড বা স্টডআউট মানে? না উভয়ই গ্রহণযোগ্য?
প্লাজমাপাওয়ার 21

উভয়ই গ্রহণযোগ্য।
নাথানিয়েল

@ নাথানিয়েল আমি নিলাম যে Fকোনও ফাইলের জন্য প্রাপ্ত কোডটি রফতানি করা এবং এটি আইএনআই করা অবৈধ importহবে? ; 3
সিজেফুরে

1
আমি এই প্রশ্নটি অনেক পছন্দ করি তবে এটি বোঝা শক্ত। অন্য কারও যদি সমস্যা হয় তবে এই দুটি স্লাইড (জাভা সাইয়েডোকোডে) আমার পক্ষে এটি বোঝা আরও সহজ করে তুলেছিল
হ্যারি

1
আপনি "প্রশ্নের আত্মা" এবং "আসল সমাধান" উল্লেখ করেছেন। এর মানে কি বোঝাতে চাচ্ছো? আমাদের কি আমাদের নিজের ভাষার জন্য একজন দোভাষী লিখতে হবে? আমি এটি করার অন্য কোনও উপায় কল্পনা করতে পারি না।
কেএসএফটি

উত্তর:


23

ব্রেনফাক , 6013 4877 4376 বাইট

সম্পাদনা করুন: -1136 বাইট। কুইনের জন্য ডেটা তৈরির আরও ভাল পথে স্যুইচ করা হয়েছে

সম্পাদনা 2: -501 বাইট আমার স্ব-দোভাষীকে ঘুরে দেখি এবং কয়েকশো বাইট কেটে ফেলে

->++>++++>+>++>+++>>++++>>++++>>+++>>++++>>+++>>++>++>++>++>++>++>++>++>++>++>++++>+++++>+>++>++>++>++>++>++>>+++>+>++>++>++++>+>+++>+>++++>+>+++>+>++>>>+++++>++++>++++>>+++>>++++>>+++>>++>++>++>++>++>++>++>++++>+++++>+>++>++>++>++>++>++>>+++>+>++>++++>+>+++>+>++++>+>+++>+>++>>>+++++>+++>>+++>+>+++++>+++++>++++>>++>+>++>++>++>++>++>++>+++>>++>++>>++++>>+++>++>++>++>++>++>++++>+++++>>++>++>++>+>+++>>++++>>++>++>++>>++>++>++>>++>++>++>>++>++>++>++>++>++>>++>++>++>++>++>++>>++>++>++>>++>++>++>++>>++>++>++>++>++++>+>+++>>+++++>+++>>++>>+++++>>>++>>++>++>++>>+++++>+++++>>>++>++>++++>+>+++>+>+>++++>+>+++>+>+>++++>+>+++>>++++>++++>++++>>+++>>>++++>>+++>>>++++>>+++>+>++++>+++++>>>++>+>+>+++>+>++++>+>+++>+>+>++++>+>+++>+>+>++++>+>+++>>+++++>+++>>++++>>+++>>>++++>>+++>>>++++>>+++>>>++++>+++++>+>+>++>++++>+>+++>+>++>>>++++>>+++>>+++>+>+>++++>++++>+++++>>++>+>+++>+>+++>>>++++>>+++>>++++>++++>+++++>+>++>>+++>>+++>+>+>++++>+>+++>+>+>++++>+>+++>+>+>++++>+>+++>>+++>>>>++++>>+++>>>++++>>+++>+>++++>++++>+++++>+++>+>+++>>>>++++++>++++>>++>++>++>++>++>++>++>++++>+>+++++>+++++>+++++>+++++>+++++>+++++>>+++++>+++>++>+>+++++>++++>>+++>>++++>+>++>+>++>>>>>+++>+>+>+>+++++>++++>>+++>>++++>+>++>+>++>>>>>+++>+>+>+>+++++>++++>>+++>>++++>+>++>+>++>>>>>+++>+>+>+>+++++>++++>>+++>>++++>+>+++++>+>++>++>++>>>>>+++>+>+>+>+++++>+++++>+++++>+++++>+++++>+++++>+++++>+++++>+++++>+++++>+++++>+++++>+++++>+++++>++++>>+++>>++++>+>++>++>+>++>>>>>+++>+>+>+>+++++>+++++>++++>>+++>>++++>+>+++++>+>++>++>++>++>++>++>++>>>>>+++>+>+>++>++>++>++>++++>+++++>+>+++++>+++++>+++++>+++++>+++++>+++++>>+++>++>+>++>++++>>+++>>++++>+>++>++>+>++>>>>>+++>+>+>+>+++++>+++++>++++>>+++>>++++>+>+++++>+>++>>>>>+++>+>+>+++++>+>++++>++>+++>+>++++>>+++>>++++++>+++>>>>++>+>+>+>+>+++++>++++>+>+++>>++++>+++++>++++>+>+>+++>>++++>+>++>++++>>+++>>>++++>+>+++>+>+>++++>>>++>++++>+>+>++++>+>+++>+>+>+++++>++++>>>+++>+>++++>>>>>++++>>+++>>++>+>+>++++>+>+++>+>+++>+>+++++>++++>>>+++>+>++++>>>>>++++>>+++>>+++++>+>+>++++>+>+++>+>+++>+>++>++>++++>+++++>>>++>+>+>+++>>>++++>>+++>>+++>+>+++>+>++++>+>+++>>+++++>+>+++>>+++++>++++>+>+>+++>>++++>+>++>++>++++>>+++>>>++++>+>+>+++>>++++>+>+>++>++++>+>+>++++>+>+++>>++++>+++++>+>+>++>>>+++>>+++++>+++++>++++>+>+>+++>>++++>++++>>+++>>++>+>+>++++>+>+++>+>+++>>++>++++>+>+>+++>>++++>++++>>+++>>+++++>+>+>++++>+>+++>+>+++>>++>++++>>+++>>+++>+++>+>+>++++>+>+++>>+++++>+++++>+>+++>>+++++>++++>+>+>+++>>++++>++++>>+++>>>+++++++>+>+>+>++++>+>+++>+>+++>>+++++>++++>+>+>+++>>++++>++++>>+++>>>+++++>+>+>+>++++>+>+++>+>+++>>+++++>++++>+>+>+++>>++++>++++>>+++>>>++++++>+>+>+>++++>+>+++>+>+>+>++++>+>+++>+>++++>+>+++>>++++>++++>>+++>>++++>>+++>>>>++++>>+++>>>++>+>+>+>++++>+>+++>+>+>+>++++>+>+++>+>++++>+>+++>>+++++>+++>>++++>>+++>>++++>>+++>>>++++>+>+++>+>+++>>+++++>++++>+>+>+++>>++++>++++>>+++>>>++>+>+>+>++++>+>+++>+>+++>>+++++>++++>+>+>+++>>++++>++++>>+++>>>>++++>>>+++>>++++>+>+>+>++++>+>+>+++>+>++>>>>++++>>>+++>>+++++>+++>>++++>+++++>+++>+>+>++>++++>+>++++>+++++>>>++>+>+>+++>+>+++>+>++++>+++++>>>++>+>+>+++>+>++++>+>+++>+>+++>>+++++>++++>+>+>+++>>++++>++++>>+++>>++>++>++++>+++++>+++++>>++++>+++++>+>+>++>>>+++>>+++>++>+>+>+++++>++++>++>++>+>+>+++>+>++++>+++++>>>>++++>>>+++>>++>+>+>+>++++>+>+>+++>+>+++>+>++++>+>+++>+>+++>+>++>++>++>++>++>++>++>++>>>++++>++>+>+>+++++>>>+++>>+++>>>++++>++++[<+]>[>[>]>[>]>++++++++++[-<++++++>]<++[<]<[<]<+>>-[[>]>[>]>+++++++[-<++++++>]<+[<]<[<]<+>>-]>]<--[>+<++++++]>++>[>]+++++[->+++<]>[>+++>+++>+++>++++++>++++++>+++>++++>++++[<]>-]>+>->>+>+++>-->>++[<]<<[<]<<[<]>[[[>]>>[>]>>[>]<[->>+<<]<[<]<<[<]<<[<]>-]>[>]>>[>]>>[>]>>[-<<+[<]<+>>[>]>]<<[[->+<]<]>>[>]>[[-<+>]>]<<[<]<<[<]<<[<]>]>>>[>]>>[>]<[[-]<]>>>,[>+++++++[<------>-]+<-[>]>[<+<+>>>>]<<<-[>]>[<+<+>>>>]<<<-[>]>[<+<+>>>>]<<<-[>]>[<-<+++>>>>]<<<--------------[>]>[<++<+>>>>]<<<--[>]>[<-<+++++++>>>>]<<++++[-<------>]+<+[>]>[<++<+>>>>]<<<--[>]>[<-<+>>>>]<<-<[+]<[>]>,]>>>+<<<<-[<]>[-[<<]>[<+[>]>>[<]<<[>>+[<<[<]<<-[>>]<[>>>>[>]>+<<[<]<]<-[>>]<[>>>>[>]>-<<[<]<]<++[->>+<<]>>[>]>]<]<[<]>-<]>-[<<]>[<++[>]>>[<<]>[<<+[<<[<]>[-<<+>>]>--[<<]>[[>]>+<<[<]<]>+[<<]>[[>]>-<<[<]<]>+[>]>]]<<[<]>--<]>-[<<]>[[>]>>.<<<[<]<]>-[<<]>[[>]>>-<<<[<]<]>-[<<]>[[>]>>,<<<[<]<<<[<]<[<]>[[>]>[>]>>>[>]>>+<<<[<]<<<[<]<[<]>-]>[>]>[>]>>[<]<]>-[<<]>[[>]>>+<<<[<]<]>-[<<]>[[>]>>>[>>]>[<<<[<<]<+>>>[>>]>-]>[-]<<+[<[->>+<<]<]<[->>+<<]<[<]<]>-[<<]>[[>]>++[-->[-<<+>>]>]+<<-[++<<]<[->>>[>>]>+<<<[<<]<]<[<]<]<++++++++>>[+<<->>]>]>>[]

এটি অনলাইন চেষ্টা করুন! এখানে ইনপুটটি একটি সাধারণ বিড়াল প্রোগ্রাম (,[.,] ) যা প্রোগ্রামটি নিজেই মুদ্রণ করবে।

"রিটার্ন 0" মান 0 দিয়ে একটি ঘরে প্রোগ্রাম শেষ করে সংজ্ঞায়িত করা হয়।

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

কিভাবে এটা কাজ করে:

পর্ব 1: ডেটা জেনারেশন

->++>++++> ....... >+++++>>>+++>>+++>>>++++>+++

এই অংশটি কুইনের ডেটা বিভাগটি তৈরি করে, এবং কোডটির বেশিরভাগ অংশে 3270 বাইট হয়। শুরুতে -ডাটা শুরুতে জন্য একটি চিহ্নিতকারী হয়। প্রতিটি >+++এই বিভাগের পরে কোডের একটি চরিত্র উপস্থাপন করে।

Number of Pluses
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
> | < | + | ] | [ | - | , | . |

পার্ট 2: ডেটা ব্যবহার করে ডেটা বিভাগ তৈরি করুন

+[<+]>

[
    Add a right arrow
    >[>]>[>]>(10++++++++++)[-<(6++++++)>]<++[<]<[<]
    <+>>-
    Add the right amount of pluses
    [
        [>]>[>]>(7+++++++)[-<(6++++++)>]<+[<]<[<]<+>>-
    ]
    >
]
Add the beginning minus
<--[>+<++++++]>++

কোড বিভাগে ডেটা উত্পন্ন করতে ব্যবহৃত অক্ষরগুলি যুক্ত করতে এটি প্রথম ভাগের ডেটা ব্যবহার করে। এটি >কোড বিভাগের শেষে এবং সেই ঘরের মানটি অনেকগুলি অনুমান করে adds

পার্ট 3: ডেটা ব্যবহার করে বাকি কোড জেনারেট করুন

Initialises the 8 characters of brainfuck
>[>]+++++[->+++<]>[>+++>+++>+++>++++++>++++++>+++>++++>++++[<]>-]
>+>->>+>+++>-->>++[<]<<[<]<<[<]>

Tape looks like:
data 0 0 code 0 0 characters

Runs through the data destructively and adds the represented symbol to the code section
[
    [
        For each plus in this cell
            Shift the gap in the characters over one
        [>]>>[>]>>[>]<[->>+<<]
        <[<]<<[<]<<[<]>-
    ]
    Navigate to character
    >[>]>>[>]>>[>]>>
    Copy the character to the end of the code section
    [-<<+[<]<+>>[>]>]

    Shift the symbol section over one
    <<[[->+<]<]
    >>[>]>[[-<+>]>]

    Navigate to next byte of data
    <<[<]<<[<]<<[<]>
]

Remove characters
>>[>]>>[>]<[[-]<]

ডেটা বিভাগটি ধ্বংস করে এবং বাকী উত্স কোডটি কোড বিভাগে যুক্ত করে

পার্ট 4: ইনপুটযুক্ত প্রোগ্রাম পান

>>>,
[
    >(7+++++++)[<(6------)>-]+<-
    [>]>
    [plus <+<+>>>>]<<<
    -[>]>
    [comma <+<+>>>>]<<<
    -[>]>
    [minus <+<+>>>>]<<<
    -[>]>
    [dot <-<+++>>>>]<<<
    (14--------------)[>]>
    [left <++<+>>>>]<<<
    --[>]>
    [right <-<+++++++>>>>]<<
    (29++++[-<------>]+<+)
    [>]>
    [start loop <++<+>>>>]<<<
    --[>]>
    [end loop <-<+>>>>]<<
    -<[+]<[>]>,
]

ইনপুটযুক্ত প্রোগ্রাম পায়। অ-ব্রেইনফাক চরিত্রগুলি সরিয়ে দেয় এবং প্রতিটি বর্ণকে একটি সংখ্যার সাথে উপস্থাপন করে:

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
] | [ | . | - | , | + | > | < |

প্রোগ্রামটির শেষের সাথে প্রতিনিধিত্ব করে 255

পর্ব 5: ইনপুটটির ব্যাখ্যা করা

Initialise simulated tape
>>>+<<<<-

[<]>
[
    -[<<]>
    [end loop
        co 0 0 0 e:  _1 0 0 0 1 ?
        Check if current cell is one
        <+[>]>>[<]<<
        co 0 0 1 e _1: 0 0 !0 1
        or
        co 0 0 1 e _1 0: 0 0 1
        [ If current cell is one navigate to corresponding start loop
            Create counter
            >>+
            [
                co 0 0 de _1 0 c: !0 1
                checks if next instruction is an end loop
                <<[<]<<-
                [>>]<
                c !0 0: 0 de _1 0 c !0 1
                or
                c: 0 0  0 de _1 0 c !0 1
                [>>>>[>]>+<<[<]<] Add one to counter if it is
                checks if start loop
                <-[>>]<
                c !0 0: 0 de _1 0 c !0 1
                or
                c: 0 0  0 de _1 0 c !0 1
                [>>>>[>]>-<<[<]<] Subtract one from counter if it is
                c ? 0: 0 de _1 0 c !0 1
                Adds two to counteract checks and move to the next instruction
                <++[->>+<<]
                >>[>]>
                c 0 0 ode _1 0 c: !0 1
                End on the counter
                    If the counter is 0 then we have reached the corresponding bracket
            ]
            c 0 0 2 de _1 0 0: !0 1 0
            <
        ]
        c 0 0 1?2 de _1 0: 0 0 1 0
        Subtract one from current instruction
            This executes the start loop code next but that does nothing
        <[<]>-<
    ]
    >-[<<]>
    [start loop
        c 0 0 0 de:  _1 0 0 ? 1
        <++[>]>>[<<]>
        c 0 0 2 de _1 0 0 0 1:
        or
        c 0 0 2 de _1 0 0: !0 1
        [ If current cell is 0 navigate to corresponding end loop
            Initialise counter
            <<+
            c 0 0 ode _1 0 c: 0 1
            [ While counter is not 0
                Transfer current instruction over (first instruction is guaranteed to be start loop)
                <<[<]>[-<<+>>]>
                co 0 0 de _1 0 c: 0 1
                Check if start loop
                --[<<]>
                co 0 0: !0 e _1 0 c 0 1
                or
                co 0 0 0 e _1 0 c 0 1
                [[>]>+<<[<]<] Add one to counter if so
                checks if end loop
                >+[<<]>
                co 0 0: !0 e _1 0 c 0 1
                or
                co 0 0 0 e:  _1 0 c 0 1
                [[>]>-<<[<]<] Subtract one from counter if so
                Add one to counteract checks and navigate to counter
                >+[>]>
                co 0 0 de _1 0 c: 0 1
                End on counter
                    If counter is 0 then we have reached the corresponding end loop
            ]
            co 0 1 e _1 0 0: 0 1
        ]
        co 0 0 2?1 e _1 0 0: ? 1
        Subtract two from the current instruction to bring it back up to the right value
        <<[<]>--<
    ]
    3 of these are pretty self explanatory
    Navigate to the current cell and execute the instruction on it
    >-[<<]>
    [output
        [>]>>.<<<[<]<
    ]
    >-[<<]>
    [minus
        [>]>>-<<<[<]<
    ]
    >-[<<]>
    [input
        Reset current cell
        [>]>>, (no more input so this is set to 0)
        co 0 0 0 e:  _1 0 0 0: 1 b 1 a 0 d 1 e 1 f
        Navigate to start of code section
        <<<[<]<<<[<]<[<]>
        d: ata 0 co 0 0 0 e _1 0 0 0 1 b
        or
        0: co 0 0 0 e _1
        Transfer next instruction to current cell
        [[>]>[>]>>>[>]>>+<<<[<]<<<[<]<[<]>-]
        0: ata 0 co 0 0 0 e _1 0 0 d 1 b
        or
        0: co 0 0 0 e _1
        Navigate back to the normal spot
        >[>]>[>]>>[<]<
    ]
    >-[<<]>
    [plus
        [>]>>+<<<[<]<
    ]
    >-[<<]>
    [right
        Simulated tape looks like:
            a b c: d e f
        co 0 0 0 e:  _1 0 0 c 1 b 1 a 0 d 1 e 1 f
        Navigate to value of cell to the right
        [>]>>>[>>]>
        co 0 0 0 e _1 0 0 c 1 b 1 a 0 d: 1 e 1 f
        Transfer it to temporary cell
        [<<<[<<]<+>>>[>>]>-]
        co 0 0 0 e _1 d 0 c 1 b 1 a 0 0: 1 e 1 f
        Pop extra marker if it exists from the right cells and add one to the left
        >[-]<<+
        co 0 0 0 e _1 d 0 c 1 b 1 a 1: 0 0 e 1 f
        Transfer all left cells over 2 cells
        [<[->>+<<]<]<[->>+<<]
        co 0 0 0 e _1 0: 0 d 1 c 1 b 1: a 0 e 1 f
        Navigate back to normal spot
        <[<]<
    ]
    >-[<<]>
    [left
        Simulated tape looks like:
            a b c: d e f
        co 0 0 0: e _1 0 0 c 1 b 1 a 0 d 1 e 1 f
        Add temporary marker
        [>]>++
        co 0 0 0 e _1 0 2: c 1 b 1 a 0 d 1 e 1 f
        Remove temporary marker and transfer all left cells over two
        [-->[-<<+>>]>]
        co 0 0 0 e _1 c 0 b _1 a _1 0 0: d 1 e 1 f
        Add marker to right cells remove marker from left cells and reset left cell's markers
        +<<-[++<<]<
        co 0 0 0 e _1 c: 0 b 1 a 0 0 1 d 1 e 1 f
        Transfer current cell to to right cells
        [->>>[>>]>+<<<[<<]<]
        co 0 0 0 e _1 0: 0 b 1 a 0 c 1 d 1 e 1 f
        Navigate back to normal spot
        <[<]<
    ]
    Add 8 to reverse checks
    <(8++++++++)>>

    Execute next instruction
    [+<<->>]>
]

প্রোগ্রামটি ব্যাখ্যা করে। সাধারণের থেকে একমাত্র পার্থক্য হ'ল ইনপুটটির পরিবর্তে কোড বিভাগের শুরু থেকে ইনপুট নেওয়া হয়।

অংশ 6: রিটার্ন 0 না হলে স্থগিত

>>[]

আপনার প্রোগ্রামের শেষ কক্ষে নেভিগেট করুন এবং রিটার্নটি 0 না হলে একটি অসীম লুপ চালান। এটি যদি 0 হয় তবে লুপটি প্রস্থান করুন এবং একই 0 এ শেষ করুন।

পরীক্ষার ইনপুট:

সর্বদা 0 (হল্ট এবং 0 ফেরত) ফেরত দেয়

(empty program)

সর্বদা 1 প্রদান করে (চিরকাল রান)

+

সমস্ত ইনপুট একসাথে যুক্ত, মোড 256 প্রদান করে (211 প্রদান করে, তাই এটি চিরকাল চলে)

,[[->+<],]>

কোনও কোডের শেষ দুটি অক্ষর যদি একটি অসীম লুপ হয় তবে 0 প্রদান করে ( []) আমার প্রোগ্রামটি দেওয়ার পরে আপনার প্রোগ্রামটি 0 ফেরায় , সুতরাং আমার প্রোগ্রামটি থামবে)

,[>,]>(9+++++++++)[-<(10++++++++++)>]<[-<-<->>]+<---[[-]>[-]<]<-[[-]>>[-]<<]>+>[-<->]<    

যারা এখনও পড়ছেন তাদের মজাদার ঘটনা

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

If cell1 == 0:
    Get input into cell1
If cell1 == 1 or cell1 == 0:
    Return 1
Else:
    Initialise self-interpreter-quine function
    Pass cell1-1 into cell1 of the function
    Run function
    Multiply cell1 by the return value
    Return cell1

অবশ্যই, ব্রেডফাক কোডিংয়ের এটি একটি সম্পূর্ণ উন্মাদ উপায়, প্রদত্ত স্ব-দোভাষীদের পুনরাবৃত্তি করা রানটাইমকে তাত্পর্যপূর্ণভাবে বাড়িয়ে দেবে।


হ্যাঁ! বিটিডাব্লু যদি আপনি এইটি গল্ফ করতে চান তবে আপনার রিটার্ন কনভেনশনটি দিয়ে আমি মনে করি আপনি সমর্থন বাদ দিতে পারেন .। যদিও এটি এখন কোনও কোড-গল্ফের প্রশ্ন নয়, পুরো ভাষাকে সমর্থন করা আরও চিত্তাকর্ষক হতে পারে।
র্জন জোহানসেন

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

দেখে মনে হচ্ছে এটি অনুগ্রহ জিততে হবে তবে আমি নিজে নিজে কোনও বিএফ বিশেষজ্ঞ না হয়ে এটি বুঝতে আমার সময় নিতে চাই। আপনি যদি পরের সপ্তাহে কিছুটা সময় না শুনেন তবে কি আমাকে বেঁধে রাখতে পারেন?
নাথানিয়েল

1
আমি নিশ্চিত করতে পারি যে এটি যতদূর অনুমান করতে পারে, তেমন স্পেকের সাথে মেলে। একটি অনুগ্রহ শীঘ্রই আপনার দিকে যাত্রা করা উচিত। (সিস্টেমটি আমাকে পুরষ্কার দেওয়ার আগে একটি বিলম্ব রয়েছে)) উত্তরের জন্য আপনাকে ধন্যবাদ, এটি অনেক প্রশংসিত।
নাথানিয়েল

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