এটি একটি মজার দুর্ঘটনা যে এই পৃথিবীতে মাত্র 1 সময় মাত্রা ঘটে তবে এটি এর মতো হতে পারে না। 2 বা ততোধিক সময় মাত্রা সহ পৃথিবীগুলি কল্পনা করা সহজ, এবং এই পৃথিবীতে আপনি কম্পিউটার তৈরি করতে এবং সেগুলির মতো সফ্টওয়্যার চালাতে পারতেন ঠিক যেমন এটি।
পদ্ধতি
ব্রেইনফ * সিকে প্রোগ্রাম দুটি সময় মাত্রায় চালানোর জন্য এখানে একটি সিস্টেম রয়েছে:
দুটি সময়ের মাত্রা x এবং y। প্রতিটি ব্রেইনফ * সিকে প্রোগ্রামে একটি অর্ধ-প্রোগ্রাম থাকে এবং আধা প্রোগ্রাম, যেমন, কোনও প্রোগ্রাম হতে পারে
x: +>+
y: [-]
দুটি অর্ধ-প্রোগ্রামের নিজস্ব প্রোগ্রাম পয়েন্টার রয়েছে, তবে তারা একটি একক টেপ পয়েন্টার ভাগ করে (এটি উভয়ই টেপের একই কক্ষে চালিত হয়)।
সময়টি দ্বিমাত্রিক, তাই এতে মুহুর্তের গ্রিড থাকে:
এক্স মাত্রা বরাবর সরানো, এক্স অর্ধ-প্রোগ্রাম এক সময় পদক্ষেপ কার্যকর করে। 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)
উভয় মাধ্যমে পৌঁছতে পারি (1,0)
বা না (0,1)
, তবে এটি একটি প্রোগ্রাম দিয়ে শুরু হয় >
এবং একটি দিয়ে শুরু হয় +
, তবে অবশ্যই তাদের আপেক্ষিক আদেশের বিষয়টি গুরুত্বপূর্ণ?
+
এবং>
? যদি এটি1 1 [0]
(বেশ পাগল তবে যা অনুমানটি বলে মনে হয়), নির্দেশ নির্দেশক কীভাবে একত্রিত হয়? যদি দুটি থ্রেড হয়+
এবং[]
তা1 2
হলে ডেটা টেপটি হবে[3]
তবে লুপের মধ্যে দ্বিতীয় নির্দেশের পয়েন্টারটি ([]+
পথ), বা বাইরের ([+]
পথ) বা এমনকি অবৈধ (+[]
)?