यह एक अजीब दुर्घटना है कि इस दुनिया में सिर्फ 1 समय का आयाम होता है, लेकिन ऐसा नहीं होना चाहिए। 2 या अधिक समय आयामों के साथ दुनिया की कल्पना करना आसान है, और उन दुनिया में आप कंप्यूटर बना सकते हैं और उन पर सॉफ़्टवेयर चला सकते हैं, जैसे इस एक में।
प्रणाली
यहाँ दो समय आयामों में ब्रेनफ * ck प्रोग्राम चलाने की प्रणाली है:
दो समय आयाम x और y हैं। प्रत्येक ब्रेनफ * ck प्रोग्राम में एक एक्स हाफ प्रोग्राम होता है, और एक हाफ प्रोग्राम, जैसे, एक प्रोग्राम हो सकता है
x: +>+
y: [-]
दो आधे कार्यक्रमों में से प्रत्येक का अपना प्रोग्राम पॉइंटर होता है, लेकिन वे एक ही टेप पॉइंटर को साझा करते हैं (अर्थात, वे दोनों टेप के एक ही सेल पर काम करते हैं)।
समय 2-आयामी है, इसलिए इसमें क्षणों का ग्रिड शामिल है:
एक्स आयाम के साथ आगे बढ़ते हुए, एक्स हाफ-प्रोग्राम एक समय कदम को कार्यान्वित करता है। 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 दिशा में समय बढ़ता है, x अर्ध-प्रोग्राम एक ही काम बार-बार करता रहता है, क्योंकि उसका समय आगे नहीं बढ़ता है।
प्रत्येक क्षण के टेप में उन सभी क्रियाओं का संचयी प्रभाव शामिल होता है जो इसमें फीड होती हैं (प्रत्येक क्रिया एक बार गिनती है)। इसलिए, उदाहरण के लिए, समय पर टेप (2, 1) में संचयी प्रभाव होता है:
- (0, 0) से एक्स-एक्शन
- (1, 0) से एक्स-एक्शन
- (0, 1) से एक्स-एक्शन
- (1, 1) से एक्स-एक्शन
- y- एक्शन से (0, 0)
- (ए, 0 से)
- y- एक्शन से (2, 0)
संचयी का अर्थ है:
- एक सेल राशि में सभी वेतन वृद्धि और गिरावट।
- टेप सूचक राशि के सभी बाएं (-1) और दाएं (+1) मूवमेंट एक साथ।
निर्देश बिंदु जमा नहीं होते हैं। प्रत्येक आधे-कार्यक्रम को उसके आयाम में पिछले क्षण से इसका निर्देश सूचक मिलता है। यही है, x प्रोग्राम पॉइंटर्स केवल x आयाम में प्रगति करते हैं, और 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
Brainf * ck ऑपरेटरों को निम्नलिखित की अनुमति है (उनके मानक अर्थ हैं):
+
,-
: वेतन वृद्धि, घटती;[
,]
: शून्य तक लूप (एक प्रसंस्करण[
या]
मानक Brainf * सी.के. में के रूप में एक बार कदम लेता है,);<
,>
: चाल छोड़ दिया / सही टेप पर।
जटिल उदाहरण
कार्यक्रम के लिए ( >
, +
) के साथ शुरू [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-सेल टेप पर चलने के लिए एक 2D ब्रेनफ * ck प्रोग्राम (एक एक्स हाफ प्रोग्राम और ay आधा प्रोग्राम के साथ) लिखें, जो निम्नलिखित दोनों स्थितियों को पूरा करता है:
- यदि टेप शुरू होता है
[0] 0 0
, समय पर (5, 5) यह0
शून्य सेल में है। - यदि टेप शुरू होता है
[1] 0 0
, समय पर (5, 5) यह0
शून्य सेल में है।
आवश्यकताओं को पूरा करने वाला सबसे छोटा कार्यक्रम जीतता है।
+
, >
) अगर मैं आप के रूप में एक ही परिणाम प्राप्त देखने के लिए।
(1,1)
तो इसके माध्यम से पहुंच सकता हूं , लेकिन यह एक कार्यक्रम के साथ शुरू होता है और एक के साथ शुरू होता है , तो निश्चित रूप से उनके सापेक्ष क्रम मायने रखता है? (1,0)
(0,1)
>
+
+
और>
? यदि यह1 1 [0]
(बहुत पागल है, लेकिन यह सुझाव देने के लिए लगता है कि क्या है), अनुदेश संकेत कैसे गठबंधन करते हैं? यदि दो धागे हैं+
और[]
, तो1 2
डेटा टेप पर होगा[3]
, लेकिन क्या लूप ([]+
पथ), या बाहर ([+]
पथ) या यहां तक कि अवैध (+[]
) के अंदर दूसरा अनुदेश सूचक है ?