यंत्र
एक बिलियर्ड-बॉल टाइप मशीन केवल प्रतीकों \
_
/
के साथ-साथ ऊपरी और निचले-मामले वाले अक्षरों, रिक्त स्थान और संख्या से बना है 1
।
\
और /
रैंप हैं। ऊपर से आने वाली एक गेंद को क्रमशः दाईं या बाईं ओर झुका दिया जाएगा। दोनों रैंप के लिए, यदि कोई गेंद दोनों ओर से आती है, तो उसे नीचे की ओर झुका दिया जाएगा।
_
एक तर्क तत्व है। इसके द्वारा किया जाने वाला तर्क कंप्यूटर का सबसे अन-बिलियर जैसा हिस्सा है। सबसे पहले, बाएं या दाएं से आने वाली गेंद उसी दिशा में जारी रहती है। ऊपर से आने वाली एक गेंद को रोका जाएगा। फिर, इसके निष्पादन के अंत के बाद (नीचे मशीन चलाना) देखें, यदि गेंदों की संख्या इस पर पार / लैंडिंग सकारात्मक है, तो एक भी गेंद तत्व के नीचे से जारी की जाती है।
एक अंतरिक्ष कुछ भी नहीं करता है। किसी भी दिशा से आने वाली कोई भी गेंद गुरुत्वाकर्षण के कारण सीधे नीचे गिरती है।
लोअरकेस अक्षर इनपुट हैं। सभी इनपुट या तो 1 या 0 होंगे।
अपरकेस अक्षर आउटपुट हैं। आउटपुट संख्या बिलबोर्ड बॉल्स की संख्या होगी जो इसके स्थान को हिट करती है।
संख्या 1
उस स्थान पर एक अतिरिक्त बिलियर्ड-बॉल जारी करती है। यह एक तार्किक 1 का प्रतिनिधित्व करता है।
\_/
गुरुत्वाकर्षण के कारण किसी भी दिशा से आने वाली किसी भी गेंद के सीधे गिरने के अलावा सभी पात्र ।
बॉल्स कभी संयोजित, विभाजित या टकराते नहीं हैं। वे केवल तब बनाए जाते हैं जब किसी इनपुट _
, या , ए से जारी किए जाते हैं 1
। वे केवल तब नष्ट हो जाते हैं जब वे सीधे a पर गिरते हैं _
।
उदाहरण मशीन-
1 a
\_/ b
\_/
\/
/\ /
_ _
A B
एक मशीन में कभी भी कोई खाली लाइनें नहीं होंगी, लेकिन _
हो सकता है कि यह दिखाई दे कि एक खाली लाइन है।
मशीन चलाना
एक मशीन परतों, या पंक्तियों में चलाई जाती है। दूसरी परत पर कुछ भी होने से पहले शीर्ष परत पर सभी बिलियर्ड बॉल आंदोलन किया जाता है।
यंत्र
ab
\_A
C
निम्नानुसार चलाया जाता है:
सबसे पहले, यह a
प्रपत्र में इनपुट के लिए संकेत देता है a:
। उपयोगकर्ता तब 1 या 0 इनपुट करेगा (इसके बाद दर्ज करें)। यह इनपुट के लिए इसे दोहराता है b
। यह पहली परत का अंत है। मैं मानने जा रहा हूं कि उपयोगकर्ता ने दोनों इनपुट के लिए 1 दर्ज किया है।
इसके बाद पहली गेंद (से a
) का रास्ता पता चलता है , जो कि \
, के पार _
, में A
, और नीचे की तरफ जाती है A
। यह दूसरी गेंद (से b
) के लिए रास्ता निकालता है , जो सीधे नीचे जाती है _
और समाप्त हो जाती है। यह दूसरी परत का अंत है।
अब, तीसरी परत से पहले, चूंकि _
दो गेंदें उस पर पार हो गई थीं, इसलिए यह एक गेंद को छोड़ता है। आउटपुट A
में एक बॉल क्रॉस की गई है, इसलिए यह आउटपुट करता है A:1
।
तीसरी परत के लिए, यह पहली गेंद (से _
) का रास्ता बताता है , जो हालांकि C
नीचे जाती है और सीधे नीचे गिरती है। दूसरी गेंद (जिसके माध्यम से गिर गई A
) भी सीधे नीचे गिरती है।
अब, चौथी परत से पहले, चूंकि आउटपुट C
में एक गेंद की यात्रा थी, इसलिए यह आउटपुट करता है C:1
।
चूंकि चौथी परत खाली है, इसलिए कार्यक्रम समाप्त हो गया है।
कुल परिणाम जैसा दिखना चाहिए
a:1 (the user entered the one)
b:1 (same here)
A:1
C:1
लक्ष्य
आपका लक्ष्य STDIN से एक मशीन लेना है और STDOUT को आवश्यकतानुसार इनपुट और प्रिंटिंग आउटपुट लेकर इसे अनुकरण करना है। आपके प्रोग्राम के लिए इनपुट का पहला भाग मशीन को चलाने के लिए होगा, उसके बाद एक खाली लाइन होगी। किसी भी इनपुट पत्र का सामना करना पड़ता है जो आपके प्रोग्राम को इनपुट नाम के रूप में एक कोलन द्वारा पीछा करने के लिए संकेत देता है। किसी भी आउटपुट को आउटपुट नाम के रूप में दिखाया जाना चाहिए, उसके बाद एक कोलन, उसके बाद उस स्थान पर गुजरने वाली गेंदों की संख्या।
यह गोल्फ है।
उदाहरण
एक तार पार करना
ab
\/
AB
एक XOR गेट
ab1
\_/
C
एक पूर्ण योजक
1 a
\_/ b
\_/
\/
/\
_ __/
\_/
\/c
\\_/
_S1
\ \/
__/
/
_
\__
C
\_/
?