মস্তিষ্কে রবোক্রিটারগুলি অনুবাদ করুন ***


15

রোবক্রিটটারস ( ব্যুৎপত্তি ) একটি ব্র্যান্ড নিউ নতুন রহস্যজনক প্রোগ্রামিং ল্যাঙ্গুয়েজ (এটি অনুসন্ধান করতে বিরক্ত করবেন না, আমি এটি কেবল আবিষ্কার করেছি)। এটা একটা ব্যাপার বৈকল্পিক এর Brainfuck (বি এফ), চলিত অপারেটর প্রতিকল্পন স্কিম চেয়ে সামান্য বেশি জটিল। রোবক্রিটটারের প্রতিটি প্রোগ্রামই পাঠ্যের একটি আয়তক্ষেত্রাকার গ্রিড যা কেবলমাত্র সাতটি অক্ষর সমেত, গ্রিডকে আকার দেওয়ার জন্য নিউলাইনগুলি থাকে . []/\|

উদাহরণস্বরূপ RoboCritters প্রোগ্রাম:

|\/||./|[]||
[..][][]   |
|/\|[..][..]
[..]    \/\/

বিএফ-তে কোনও রোবক্রিটটার প্রোগ্রাম অনুবাদ করতে, গ্রিডের প্রতিটি অ-নিউলাইন চরিত্রটি সাধারণ পাঠক্রমের (বাম-থেকে-ডানদিকে তারপর উপরে থেকে নীচে) দেখুন, যেমন |\/||./|[]||[..][][] ||/\|[..][..][..] \/\/

বর্তমানের চরিত্র থেকে ডানদিকে নীচে প্রসারিত গ্রিডের 4 × 2 বিভাগটি নীচে তালিকাভুক্ত আটটি রোবট সমালোচকদের সাথে ঠিক মিলে গেলে, সম্পর্কিত বিএফ কমান্ড যুক্ত করুন><+-.,[] প্রাথমিক ( ) শূন্য) বিএফ প্রোগ্রামে যুক্ত করুন।

যদি 4 × 2 গ্রিড বিভাগটি কোনও রোবট সমালোচকদের সাথে মেলে না বা সীমা ছাড়িয়ে যায় , তবে বিএফ প্রোগ্রামে কিছুই যুক্ত হয় না।

  1. জয়বট, >কমান্ড:

    [..]
    \][/
    
  2. কলম্বোট, <কমান্ড:

    [..]
    /][\
    
  3. স্কুইডবট, +কমান্ড:

    [..]
    //\\
    
  4. স্পাইডারবট, -কমান্ড:

    [..]
    ||||
    
  5. বানিবোট, .কমান্ড:

    [][]
    [..]
    
  6. টুথবট, ,কমান্ড:

    [..]
    |/\|
    
  7. ফক্সবট, [কমান্ড:

    |\/|
    [..]
    
  8. ব্যাটবট, ]কমান্ড:

    [..]
    \/\/
    

সুতরাং, উদাহরণ প্রোগ্রাম পড়া

|\/||./|[]||
[..][][]   |
|/\|[..][..]
[..]    \/\/

আমরা দেখতে পাচ্ছি যে আমরা প্রথমে একটি ফক্সবটকে (কলাম 1, সারি 1 এ), তারপরে একটি টুথবট (সি 1, আর 2), তারপরে একটি বানিবট (সি 5, আর 2) এবং অবশেষে একটি ব্যাটবট (সি 9, আর 3) পেয়েছি। এটি বিএফ প্রোগ্রামের সাথে মিলে যায়[,.]

লক্ষ্য করুন যে ফক্সবট এবং টুথবট ওভারল্যাপ হয়। এটি ইচ্ছাকৃত;ওভারল্যাপ হয়ে গেলে রোবট সমালোচকদের আলাদাভাবে ব্যাখ্যা করা হয় না

চ্যালেঞ্জ

একটি সংক্ষিপ্ততম প্রোগ্রামটি লিখুন যা কোনও রোবক্রিটার প্রোগ্রামে লাগে এবং তার বিএফ সমতুল্য ফলাফলকে আউটপুট করে। আপনাকে বিএফ চালানোর দরকার নেই বা এটি বৈধ কিনা তা যাচাই করার দরকার নেই, কেবল রোবক্রিটটার কোডটি বিএফ কোডে অনুবাদ করুন।

বিস্তারিত

  • সমস্ত ইনপুট রবক্রিটারস প্রোগ্রামগুলি বৈধ হবে, এটি হ'ল এটি কেবলমাত্র সাতটি অক্ষর সমেত পাঠ্যের একটি সঠিক আয়তক্ষেত্রাকার ব্লক হবে, এটির আকারের জন্য নিউলাইনগুলি . []/\|। নতুন লাইনগুলি যে কোনও সুবিধাজনক সাধারণ প্রতিনিধিতে থাকতে পারে । আপনি বিকল্পগুলি ধরে নিতে পারেন যে প্রোগ্রামগুলির একটি একক পেছনের নতুন লাইন রয়েছে।

  • আপনাকে অবশ্যই 0 × 0 খালি (বা একক নিউলাইন) প্রোগ্রাম সহ 4 × 2 এর চেয়ে ছোট রবোক্রিটার প্রোগ্রামগুলি সমর্থন করতে হবে। এগুলি সমস্ত খালি বিএফ প্রোগ্রামের সাথে (খালি স্ট্রিং) অনুরূপ।

  • আউটপুট বিএফ প্রোগ্রামটি কেবলমাত্র আটটি বিএফ কমান্ড অক্ষর সমন্বিত এক লাইনের স্ট্রিং হওয়া উচিত ><+-.,[]। Optionচ্ছিকভাবে একটি একক ট্রেলিং নিউলাইন থাকতে পারে।

  • যে কোনও সাধারণ উপায়ে ইনপুট নিন (স্টিডিন / পাঠ্য ফাইল / কমান্ড লাইন) এবং স্টাডআউট বা আপনার ভাষার নিকটতম বিকল্পে আউটপুট।

  • কোনও প্রোগ্রামের পরিবর্তে আপনি এমন একটি ফাংশন লিখতে পারেন যা রোবক্রিটটার প্রোগ্রামটিকে স্ট্রিং হিসাবে গ্রহণ করে এবং বিএফ প্রোগ্রামের স্ট্রিং প্রিন্ট করে বা প্রদান করে।

উদাহরণ

  1. ইনপুট: (উপরে উদাহরণের বৈকল্পিক)

    |\/|[][]
    [..][][]
    |/\|[..]
        \/\/
    

    আউটপুট: [,.]

  2. ইনপুট: (সমস্ত রোবট সমালোচক পরীক্ষা করে)

    [..][[[[[..]]. ]|\/|
    \][/[..]//\\[..][..]
    [..]/][\[][]|/\|[..]
    ||||/\| [..]|  |\/\/
    

    আউটপুট: >+[<,-.]

  3. ইনপুট:

    [..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [][] [][] [..] [..] [..] [][] [..] [..] [][] [..] [..] [][] [..] [][] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [][] [..] [..] [..] [][]
    //\\ //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ /][\ /][\ /][\ /][\ |||| \/\/ \][/ //\\ \][/ //\\ \][/ |||| \][/ \][/ //\\ [..] /][\ \/\/ /][\ |||| \/\/ \][/ \][/ [..] \][/ |||| |||| |||| [..] //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] [..] //\\ //\\ //\\ [..] \][/ \][/ [..] /][\ |||| [..] /][\ [..] //\\ //\\ //\\ [..] |||| |||| |||| |||| |||| |||| [..] |||| |||| |||| |||| |||| |||| |||| |||| [..] \][/ \][/ //\\ [..] \][/ //\\ //\\ [..]
    

    আউটপুট: ( বিএফ হ্যালো ওয়ার্ল্ড প্রোগ্রাম )

    ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
    
  4. ইনপুট: (কোনও রোবট সমালোচক উপস্থিত নেই)

    /\\\[].
    ]..[..]
    \\//||\
    

    আউটপুট: (খালি স্ট্রিং)

স্কোরিং

বাইটস মধ্যে সংক্ষিপ্ততম জমা জয়। ( হ্যান্ড বাইট কাউন্টার। ) টাইব্রেকার সবচেয়ে বেশি পোস্ট করা পোস্ট।

উত্তর:


9

সিজেম, 86 85 বাইট

qN/S4*f+_W<\1>]z:z4few:~"¨Ý³5&ágûò{wÉ](Ý"296b6b"|[\.]/"f=2/4/"><+-.,[]":Ler{L&},

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

qN/    e# Read input and split into lines.
S4*f+  e# Append four spaces to each line. This has two purposes. a) We can later join all
       e# the lines together without worrying about critters appearing across the line
       e# edges because no critter contains spaces. b) It works around a bug in CJam where
       e# the command `ew` crashes when the substring length is longer than the string.
_W<    e# Copy the lines and discard the last one.
\1>    e# Swap with the other copy and discard the first one.
]z     e# Wrap both in an array and zip them up. Now we've got an array which contains
       e# all consecutive pairs of lines.
:z     e# Zip up each of those pairs, such it becomes an array of two-character strings.
       e# We can now find the critters as 4-element subarrays in each of those arrays.
4few   e# Turn each of those arrays into a list of its (overlapping) 4-element subarrays.
:~     e# Flatten those lists, such that we get one huge array of all 4x2 blocks, in order.
"gibberish"296b6b
       e# This is an encoded form of the critters. The above produces a string of the
       e# critters in column-major order, all joined together, where the characters are
       e# represented by numbers 0 to 5.
"|[\.]/"f=
       e# Turn each number into the correct character.
2/4/   e# Split first into columns, then into critters. Now all we need to do is find these
       e# the elements of this array in the processed input.
"><+-.,[]":L
       e# A string of all BF characters in the same order as the critters. Store this in L.
er     e# Do an element-wise replacement. This will leave non-critter blocks untouched.
{L&},  e# Filter the result. The elements are now either characters, or still full 4x2
       e# blocks. We take the set intersection with the array (string) of BF characters.
       e# If the current element is itself a character, it will be coerced into an array
       e# containing that character, such that we get a non-empty intersection. If the
       e# current element is a block instead, if contains arrays itself, so the set
       e# intersection will always be empty.

       e# The resulting array of characters is the desired BF program and will be printed
       e# automatically at the end of the program.

সমালোচকদের এই স্ক্রিপ্টটি দিয়ে এনকোড করা হয়েছিল । আমি নীচের সাথে এনকোডিংয়ের জন্য 296 বেসটি পেয়েছি, বরং নিরীহ ম্যাথমেটিকা ​​স্ক্রিপ্ট (যা এখনও আরও ভাল বেসের সন্ধানে চলছে):

b = 256;
While[True,
  If[
    FreeQ[
      d = IntegerDigits[15177740418102340299431215985689972594497307279709, b], 
      x_ /; x > 255
    ], 
    Print@{b, Length@d}
  ];
  b += 1;
]

3

জাভাস্ক্রিপ্ট ES6, 209 198 192 বাইট

f=c=>{s=''
b=o=>c.substr(o,4)||1
for(i in c)s+=!~(d='1\\][/1/][\\1//\\\\1||||[][]11|/\\||\\/|11\\/\\/'.replace(/1/g,'[..]').indexOf(b(i)+b(++i+c.search(`
`))))|d%8?'':'><+-.,[]'[d/8]
return s}

নীচের স্ট্যাক স্নিপেটে অ্যানগল্ফড কোড রয়েছে যা আপনি যে কোনও ব্রাউজারে সহজেই চালাতে পারবেন।

var f = function(c) {
  var s = '';
  var b = function(o) {
    // If it is looking on the last line, this will return an empty string
    // the second time, which could cause an inaccurate match.
    // `||1` makes it return 1 instead of '', which won't match.
    return c.substr(o, 4) || 1;
  }
  for (var i in c) {
    r = b(i) + b(++i + c.search('\n'));
    d = '1\\][/1/][\\1//\\\\1||||[][]11|/\\||\\/|11\\/\\/'.replace(/1/g, '[..]').indexOf(r);
    s += !~d || d % 8 ? '' : '><+-.,[]' [d / 8];
  }
  return s;
}

// GUI code below
function run(){document.getElementById('s').innerHTML=f(document.getElementById('t').value);};document.getElementById('run').onclick=run;run()
<textarea id="t" cols="30" rows="10">
[..][[[[[..]]. ]|\/|
\][/[..]//\\[..][..]
[..]/][\[][]|/\|[..]
||||/\| [..]|  |\/\/</textarea><br /><button id="run">Run</button><br /><code id="s"></code>

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