দুটি সময়ের মাত্রায় প্রোগ্রামিং


17

এটি একটি মজার দুর্ঘটনা যে এই পৃথিবীতে মাত্র 1 সময় মাত্রা ঘটে তবে এটি এর মতো হতে পারে না। 2 বা ততোধিক সময় মাত্রা সহ পৃথিবীগুলি কল্পনা করা সহজ, এবং এই পৃথিবীতে আপনি কম্পিউটার তৈরি করতে এবং সেগুলির মতো সফ্টওয়্যার চালাতে পারতেন ঠিক যেমন এটি।

পদ্ধতি

ব্রেইনফ * সিকে প্রোগ্রাম দুটি সময় মাত্রায় চালানোর জন্য এখানে একটি সিস্টেম রয়েছে:

দুটি সময়ের মাত্রা x এবং y। প্রতিটি ব্রেইনফ * সিকে প্রোগ্রামে একটি অর্ধ-প্রোগ্রাম থাকে এবং আধা প্রোগ্রাম, যেমন, কোনও প্রোগ্রাম হতে পারে

x: +>+
y: [-]

দুটি অর্ধ-প্রোগ্রামের নিজস্ব প্রোগ্রাম পয়েন্টার রয়েছে, তবে তারা একটি একক টেপ পয়েন্টার ভাগ করে (এটি উভয়ই টেপের একই কক্ষে চালিত হয়)।

সময়টি দ্বিমাত্রিক, তাই এতে মুহুর্তের গ্রিড থাকে:

এক্স এবং ওয়ানের ক্রিয়া দ্বারা সংযোগের একটি 3x3 গ্রিড times

এক্স মাত্রা বরাবর সরানো, এক্স অর্ধ-প্রোগ্রাম এক সময় পদক্ষেপ কার্যকর করে। Y মাত্রা বরাবর সরানো, y অর্ধ-প্রোগ্রাম এক সময় পদক্ষেপ কার্যকর করে।

সুতরাং, উদাহরণস্বরূপ, আসুন বলি যে টেপটি শুরু হয় [0] 0 0( []টেপ পয়েন্টার উপস্থাপন করে) এবং x / y প্রোগ্রামগুলি হয় +এবং ->-। এই প্রোগ্রামটির সম্পাদনটি এরকম দেখাচ্ছে:

x y  tape         x-action  y-action
0 0  [ 0]  0   0   + at 0    - at 0
1 0  [ 1]  0   0   (done)    - at 0
0 1  [-1]  0   0   + at 0    move >
1 1  [ 0]  0   0   (done)    move >

লক্ষ্য করুন যে সময়টি y দিকের দিকে এগিয়ে যাওয়ার সাথে সাথে, এক্স অর্ধ-প্রোগ্রাম একই কাজ বার বার করে চলেছে, কারণ এর সময় অগ্রগতি হয় না।

প্রতিটি মুহুর্তে টেপটিতে এতে ফিড হওয়া সমস্ত ক্রিয়াকলাপের সংশ্লেষিত প্রভাব অন্তর্ভুক্ত থাকে (প্রতিটি ক্রিয়া একবার গণনা করা হয়)। সুতরাং, উদাহরণস্বরূপ, টেপ সময়ে (2, 1) এর সংশ্লেষিত প্রভাব রয়েছে:

নীচে তালিকাভুক্ত কোন ক্রিয়াগুলি কোনও টেপ স্ন্যাপশটে ফিড করে

  • এক্স-অ্যাকশন থেকে (0, 0)
  • এক্স-অ্যাকশন থেকে (1, 0)
  • এক্স-অ্যাকশন থেকে (0, 1)
  • এক্স-অ্যাকশন থেকে (1, 1)
  • (0, 0) এর y- অ্যাকশন
  • (1, 0) এর y- অ্যাকশন
  • (2, 0) এর y- অ্যাকশন

ক্রমবর্ধমান অর্থ:

  • একক কোষে সমস্ত বৃদ্ধি এবং হ্রাস।
  • সমস্ত বাম (-1) এবং ডান (+1) এক সাথে টেপ পয়েন্টার যোগফলে চলে আসে।

নির্দেশ পয়েন্টার জমে না। প্রতিটি অর্ধ-প্রোগ্রাম তার মাত্রার পূর্বের মুহুর্ত থেকে নির্দেশিকা পয়েন্টার পায়। অর্থাৎ এক্স প্রোগ্রাম পয়েন্টারগুলি কেবল এক্স মাত্রায় অগ্রগতি করে এবং y প্রোগ্রাম পয়েন্টারগুলি কেবল y মাত্রায় অগ্রগতি করে। সুতরাং, উদাহরণস্বরূপ, প্রোগ্রাম ( [], +) থেকে শুরু করে [0] 0 0, কার্যকর করা হবে

x y  tape   x-action  y-action  x-prog-ptr        y-prog-ptr
0 0  0 0 0            + at 0    0                 0
1 0  0 0 0            + at 0    2 (from jump)     0
0 1  1 0 0                      0                 1
1 1  2 0 0                      1 (from NO jump)  1

উপরের ( +, ->-) সিমুলেশন থেকে আরও কিছু মুহুর্ত হল:

x y   tape          x-action  y-action  x-prog-ptr y-prog-ptr
0 0   [ 0]  0   0   + at 0    - at 0    0          0
1 0   [ 1]  0   0             - at 0    1          0
2 0   [ 1]  0   0             - at 0    1          0
0 1   [-1]  0   0   + at 0         >    0          1
1 1   [ 0]  0   0                  >    1          1
2 1   [-1]  0   0                  >    1          1
0 2    -1 [ 0]  0   + at 1    - at 1    0          2
1 2     0   1 [ 0]            - at 2    1          2
2 2   [-1]  1   0             - at 0    1          2

মস্তিষ্ক * সি কে অপারেটরগুলি নীচে নিম্নলিখিত (তাদের স্ট্যান্ডার্ড অর্থ রয়েছে):

  • +, -: বৃদ্ধি, হ্রাস;
  • [, ]: শূন্য অবধি লুপ (একটি প্রক্রিয়াজাতকরণ [বা ]স্ট্যান্ডার্ড ব্রেইনফ * সিকে হিসাবে একটি সময়-পদক্ষেপ নেয়);
  • <, >: টেপ বাম / ডান সরান।

জটিল উদাহরণ

প্রোগ্রামটি ( >, +) এর সাথে শুরু করে [0] 0 0:

x y   tape          x-action  y-action  x-prog-ptr y-prog-ptr
0 0   [ 0]  0   0        >    + at 0    0          0
1 0     0 [ 0]  0             + at 1    1          0
0 1   [ 1]  0   0        >              0          1
1 1     1   1 [ 0]                      1          1

( +, -) এর সাথে শুরু করে [0] 0 0:

x y   tape          x-action  y-action  x-prog-ptr y-prog-ptr
0 0   [ 0]  0   0   + at 0    - at 0    0          0
1 0   [ 1]  0   0             - at 0    1          0
0 1   [-1]  0   0   + at 0              0          1
1 1   [ 0]  0   0                       1          1

নোট করুন যে টেপটি [0] 0 0প্রতিটি হিসাবে শেষ হয় +এবং -দুবার ঘটে, 0 এর যোগফল।

প্রোগ্রামটি ( >+, [-]) এর সাথে শুরু করে [0] 0 0:

x y   tape          x-action  y-action  x-prog-ptr y-prog-ptr
0 0   [ 0]  0   0        >              0          0
1 0     0 [ 0]  0   + at 1              1          0
2 0     0 [ 1]  0                       2          0
0 1   [ 0]  0   0        >              0          3
1 1     0   0 [ 0]  + at 2              1          3
2 1     0   1 [ 1]            - at 2    2          1
0 2   [ 0]  0   0        >              0          3
1 2   [ 0]  0   0   + at 0              1          3
2 2   [ 1]  1   0                       2          2

তীরগুলি সহ ডায়াগ্রাম

নীচের চিত্রটি কীভাবে কর্ম এবং টেপ গণনা করতে হবে তা দেখায়:

তীরগুলি সহ চিত্রটি কীভাবে প্রোগ্রামের অংশগুলি গণনা করা হয় তা দেখায়

ধাঁধা

3-সেল টেপ চালানোর জন্য একটি 2 ডি ব্রেইনফ * সি কে প্রোগ্রাম লিখুন (একটি এক্স অর্ধ-প্রোগ্রাম এবং আই হাফ প্রোগ্রাম সহ) যা নিম্নলিখিত উভয় শর্ত পূরণ করে:

  • যদি টেপটি শুরু হয় [0] 0 0, সময়ে (5, 5) এটি 0জিরোথ কক্ষে থাকে।
  • যদি টেপটি শুরু হয় [1] 0 0, সময়ে (5, 5) এটি 0জিরোথ কক্ষে থাকে।

সংক্ষিপ্ততম প্রোগ্রামগুলি প্রয়োজনীয়তাগুলি পূরণ করে ins


কেবল যাচাই করার জন্য: দৌড়ের ফলাফল কী +এবং >? যদি এটি 1 1 [0](বেশ পাগল তবে যা অনুমানটি বলে মনে হয়), নির্দেশ নির্দেশক কীভাবে একত্রিত হয়? যদি দুটি থ্রেড হয় +এবং []তা 1 2হলে ডেটা টেপটি হবে [3]তবে লুপের মধ্যে দ্বিতীয় নির্দেশের পয়েন্টারটি ( []+পথ), বা বাইরের ( [+]পথ) বা এমনকি অবৈধ ( +[])?
জন ডিভোরাক

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

এটি একটি দুর্দান্ত চ্যালেঞ্জ তবে উত্তরগুলি র‌্যাঙ্ক করতে সক্ষম হওয়ার জন্য এটি একটি উদ্দেশ্যজয়ী মানদণ্ডের প্রয়োজন।
মার্টিন এন্ডার

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

উত্তর:


8

মোট 4 বাইট: ( [-], >)

এ জাতীয় সবচেয়ে ছোট প্রোগ্রামটি খুঁজে পেতে আমি একটি ব্রুট-ফোরজার লিখেছিলাম

কর্মসূচিতে এই প্রোগ্রামটির চিত্রগুলি এখানে রয়েছে Here এই গ্রিডগুলি অনুরূপভাবে গ্রিডের মতো বিন্যাসে সাজানো হয়েছে, (0,0) নীচে-বাম কোণে, এক্স-অক্ষের সাথে এক্স-টাইম এবং y- অক্ষের সাথে y- সময় হবে। উপরের-ডান কোণে ফলাফল রয়েছে।

প্রথমে, একটি টেপ সহ 0 0 0:

|  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 |  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 
|([)-]       |[-]         |[-]         |[-]         |[-]         |[-]         
|>           |>           |>           |>           |>           |>           
+------------+------------+------------+------------+------------+------------
|  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 |  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 
|([)-]       |[-]         |[-]         |[-]         |[-]         |[-]         
|>           |>           |>           |>           |>           |>           
+------------+------------+------------+------------+------------+------------
|  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 |  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 
|([)-]       |[-]         |[-]         |[-]         |[-]         |[-]         
|>           |>           |>           |>           |>           |>           
+------------+------------+------------+------------+------------+------------
|  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 |  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 
|([)-]       |[-]         |[-]         |[-]         |[-]         |[-]         
|>           |>           |>           |>           |>           |>           
+------------+------------+------------+------------+------------+------------
|  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 |  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 
|([)-]       |[-]         |[-]         |[-]         |[-]         |[-]         
|>           |>           |>           |>           |>           |>           
+------------+------------+------------+------------+------------+------------
|( 0)  0   0 |( 0)  0   0 |( 0)  0   0 |( 0)  0   0 |( 0)  0   0 |( 0)  0   0 
|([)-]       |[-]         |[-]         |[-]         |[-]         |[-]         
|(>)         |(>)         |(>)         |(>)         |(>)         |(>)         
+------------+------------+------------+------------+------------+------------

এখন একটি টেপ সহ 1 0 0:

|  1 ( 0)  0 |  1   0 ( 0)|( 0)  0   0 |  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 
|([)-]       |[-]         |[-]         |[-]         |[-]         |[-]         
|>           |>           |>           |>           |>           |>           
+------------+------------+------------+------------+------------+------------
|  1 ( 0)  0 |  1   0 ( 0)|( 0)  0   0 |  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 
|([)-]       |[-]         |[-]         |[-]         |[-]         |[-]         
|>           |>           |>           |>           |>           |>           
+------------+------------+------------+------------+------------+------------
|  1 ( 0)  0 |  1   0 ( 0)|( 0)  0   0 |  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 
|([)-]       |[-]         |[-]         |[-]         |[-]         |[-]         
|>           |>           |>           |>           |>           |>           
+------------+------------+------------+------------+------------+------------
|  1 ( 0)  0 |  1   0 ( 0)|( 0)  0   0 |  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 
|([)-]       |[-]         |[-]         |[-]         |[-]         |[-]         
|>           |>           |>           |>           |>           |>           
+------------+------------+------------+------------+------------+------------
|  1 ( 0)  0 |  1   0 ( 0)|( 0)  0   0 |  0 ( 0)  0 |  0   0 ( 0)|( 0)  0   0 
|([)-]       |[-]         |[-]         |[-]         |[-]         |[-]         
|>           |>           |>           |>           |>           |>           
+------------+------------+------------+------------+------------+------------
|( 1)  0   0 |( 1)  0   0 |( 0)  0   0 |( 0)  0   0 |( 0)  0   0 |( 0)  0   0 
|([)-]       |[(-)]       |[-(])       |[-]         |[-]         |[-]         
|(>)         |(>)         |(>)         |(>)         |(>)         |(>)         
+------------+------------+------------+------------+------------+------------

এমন কয়েকটি দুটি বিষয় ছিল যা স্পাকে স্পষ্টভাবে ব্যাখ্যা করা হয়নি, যেমন 3-সেল টেপটি চারপাশে জড়িয়ে রয়েছে।


বোনাস হিসাবে, এখানে ( >+, [-]) উদাহরণের ভিজ্যুয়ালাইজেশন রয়েছে :

|( 0)  0   0 |( 0)  0   0 |( 1)  1   0 
|(>)+        |>(+)        |>+          
|[-]         |[-]         |[-(])       
+------------+------------+------------
|( 0)  0   0 |  0   0 ( 0)|  0   1 ( 1)
|(>)+        |>(+)        |>+          
|[-]         |[-]         |[(-)]       
+------------+------------+------------
|( 0)  0   0 |  0 ( 0)  0 |  0 ( 1)  0 
|(>)+        |>(+)        |>+          
|([)-]       |([)-]       |([)-]       
+------------+------------+------------

এবং এর একটি ( >+, +>) উদাহরণ:

|( 1)  0   0 |  1   1 ( 0)|  1   3 ( 1)
|(>)+        |>(+)        |>+          
|+(>)        |+(>)        |+(>)        
+------------+------------+------------
|( 0)  0   0 |  0 ( 0)  0 |  0 ( 1)  0 
|(>)+        |>(+)        |>+          
|(+)>        |(+)>        |(+)>        
+------------+------------+------------

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


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