স্ব-মেরামতের প্রোগ্রাম ত্রুটি সনাক্তকরণ


14

আপনার কাজটি এমন একটি প্রোগ্রাম তৈরি করা যেখানে কোনও একটি অক্ষর মুছে ফেলা হলে এটি সনাক্ত করবে যে কোন অক্ষরটি মুছেছিল এবং তারপরে মুছে ফেলা অক্ষরটিকে তার নিজস্ব উত্স ফাইলে পুনরায় সন্নিবেশ করানো হবে।

উদাহরণস্বরূপ, যদি আপনার প্রোগ্রামটি হয় RadiationHardenedএবং এটিতে পরিবর্তিত হয় RadiaionHardened, তবে আপনার প্রোগ্রামটি অবশ্যই আউটপুট করবে যে 5 তম বাইট (0-সূচকযুক্ত) সংশোধিত হয়েছিল এবং তারপরে প্রোগ্রাম উত্সটি RadiationHardenedকার্যকর হওয়ার পরে অবিলম্বে হওয়া উচিত ।

নোট এবং বিধি

  • আপনি ধরে নিতে পারেন ঠিক কার্যকর করার আগে একটি অক্ষর উত্স কোডে মুছে ফেলা হয়েছিল। অপরিবর্তিত প্রোগ্রামের জন্য আচরণটি অপরিজ্ঞাত।
  • আপনি ধরে নিতে পারেন পরিবর্তিত বাইট মুছে ফেলা হবে, স্থানান্তরিত হবে না, ,োকানো হবে না বা প্রতিস্থাপন করা হবে।
  • একই চরিত্রের একাধিক রান করার ক্ষেত্রে, আপনি রানের প্রথম বা শেষ সূচকটি রিপোর্ট করতে পারেন, তবে আপনি যা ব্যবহার করছেন তা সম্পর্কে সামঞ্জস্য বজায় রাখতে পারেন। উদাহরণস্বরূপ baaad, মুছে ফেলা হচ্ছে baad1 বা 3 (শূন্য সূচকযুক্ত) এর প্রতিবেদন করতে পারে তবে পুরো প্রোগ্রাম জুড়ে অবশ্যই এটি একই হবে।
  • আপনার নিজের ফাইলটিতে পুরো উত্সটি লেখার দরকার নেই। আপনার কেবল মুছে ফেলা বাইটটি পুনরায় সন্নিবেশ করতে হবে।
  • বিকিরণ-কড়া কুইনের জন্য সাধারণ নিয়মগুলির বিপরীতে, প্রোগ্রামটির নিজস্ব উত্স কোডটি পড়া থেকে পরিবর্তিত বাইট সনাক্ত করা সুষ্ঠু খেলা।
  • আপনি যে কোনও যুক্তিসঙ্গত বিন্যাসের মাধ্যমে পরিবর্তিত বাইট সূচক আউটপুট করতে পারেন। এটি 0-সূচকযুক্ত বা 1-সূচকযুক্ত বা অন্য কোনও স্বরলিপি কিনা তা নিয়ে সামঞ্জস্য বজায় রাখুন। এমনকি আপনি কোনও টেম্পলেট স্ট্রিংয়ের মধ্যেও একটি সংখ্যা আউটপুট করতে পারেন।

এটি তাই সংক্ষিপ্ততম প্রোগ্রামটি জয়ী।

শুভকামনা!

EDIT1: প্রতিস্থাপন থেকে মুছে ফেলার জন্য প্রয়োজনীয় পরিবর্তন

EDIT2: নকল রানের জন্য যুক্ত বিধি


4
এটি স্বেচ্ছাসেবী মোছা পরিচালনার চেয়ে অনেক বেশি শক্ত । সর্বাধিক অ esolangs স্পষ্টত বাইরে (এটা লিখতে সাধারণত অসম্ভব কোনো যে অধীনে syntactially বৈধ দেহাবশেষ প্রোগ্রাম কোন এক বাইট পরিমার্জন)। এমনকি ফুনজয়েডগুলি বেশিরভাগই ব্যর্থ হয় (0 তম বাইটটি যদি প্রস্থান প্রোগ্রামের আদেশে পরিবর্তিত হয় তবে তারা কিছুই করতে পারে না )। আমি ভেবেছিলাম সম্ভবত দুটি আইপির একটি ফিশনের মতো কিছুতে বেঁচে থাকতে পারে তবে এর *আদেশটি সমস্ত আইপি মেরে ফেলেছে kill কার্ডিনাল এটি করতে পারে না, কারণ @
লিন

এটি এমন কোনও code-challengeজায়গায় রূপান্তরিত হতে পারে যেখানে প্রতিটি প্রোগ্রামকে রেডিয়েশনের বিরুদ্ধে সুরক্ষিত বাইটগুলির একটি তালিকা ঘোষণার অনুমতি দেওয়া হয় (তবে এটি বলার অপেক্ষা রাখে না - মোট আকারের 50%)। একটি সাধারণ স্কোরিং সিস্টেমটি হ'ল প্রতিটি বিকিরণ-সুরক্ষিত বাইটকে 10 বাইট হিসাবে গণনা করা বা এটির মতো কিছু।
আর্নল্ড

(তবে এটি কিছু তুচ্ছ এবং খুব আকর্ষণীয় উত্তর হতে পারে)
আর্নল্ড

1
@ জোকিং, নিখোঁজ হিসাবে প্রতিবেদন করা যতক্ষণ না এটি যথাসম্ভব যথাযথ।
বিফস্টার

2
"আপনার ফাইলটির একটি নির্দিষ্ট নামকরণের প্রয়োজন হতে পারে এবং একটি নির্দিষ্ট ডিরেক্টরি থেকে চালানো যেতে পারে" - সাবধানতা অবলম্বন করুন, কেউ ঠিক প্রয়োজন যে ফাইল নামটি সঠিক প্রোগ্রাম হতে পারে ...
ASCII- কেবল

উত্তর:


9

বেফুঞ্জ -98 (এফবিবিআই) , 344 296 248 বাইট

20020xxnngg33%%!!2200gg''00--3300gg33%%!!4400gg55%%!!22kk++55##rr55kk::00gg\\11pp00gg\\11++11pp22++00::pp00gg\\11++00gg--!!zz!!22**++00::gg00gg8844**--!!55++jj..''gg::00rr00::gg\\--..''220011''0011::''002211''223311''00441144kkppgg11001100::99oo@@

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

প্রতিপাদন!

বেফুঞ্জ -98 হ'ল প্রথম রহস্যময় ভাষা যা আমি খুঁজে পেলাম যে 2D উভয়ই ছিল এবং ফাইল আউটপুট ছিল। এটি একটি সম্পূর্ণ সমাধান (একটি ট্রেলিং নিউলাইন সহ) একটি ট্যাবে অক্ষর হিসাবে নামক কোনও ফাইলে সংরক্ষণ করা। এটি 0-সূচিকৃত হিসাবে আউটপুট হয় এবং অক্ষরের একটি রানে প্রথম সূচককে আউটপুট করে (যদিও কেবল কখনও জোড়া থাকে)।

কয়েকটি গল্ফ তৈরি করতে হবে, বিশেষত কোডটিতে 15 নো-অপস রয়েছে , এখন কেবল একটি নো-অপ্প! আমি 200 বাইটে বা তার নিচে নামার লক্ষ্য নিয়ে এই সংক্ষিপ্তটি তৈরিতে কাজ করব।


কি শান্তি! আমি মনে করি না এটি সম্ভব হয়েছিল
মিল্কিওয়ে 90

3

ইউনেফুঞ্জ -98 (পাইফুঞ্জ) , 118 বাইট

22xx00##rr33kk::gg\\11--pp22++00ppgg\\11++gg--!!zz!!22**--00gg::gg8844**--!!22++jj##''rr++..gg''2200pp0011--00::99oo@@

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

প্রতিপাদন!

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

ব্যাখ্যা (ডি-সদৃশ):

2x        Set the delta of the movement to 2
          This means the pointer moves 2 cells every step
          This will also initialise a counter as 2 (unless a 2 has been removed)
  0       Create the cell counter  (This will be stored at cell 0)
   #r     Enter the loop
     3k:                 Create 3 more copies of the counter
        g                Get the cell at the counter's position
         \1-p            Put it in the cell before that position
             2+0p        Add 2 to the counter and put it in cell 0
                 g       Get the cell at the counter's position
                  \1+g   Get the next cell
                      -!z!2*      If they are identical, push two, else 0
                            --    Subtract it from the total counter
                              0g:g84*-!   If the next character is a space
                                       2+j  r   Exit loop
                                         j#'    Else jump back to the start

Once the loop is over
+      Add the negative counter to the total counter
 .     And print
   '20p          Replace the 2 in cell 0 that was overwritten
             o   Write to a file named
            9    Tab
       01-       The cells from -1 to
  g              The total number of cells
              @  And exit the program
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.