प्यारी मछली जो कि > <> (एक गूढ़ प्रोग्रामिंग भाषा) के कोड के माध्यम से तैरती है, अपने प्राकृतिक वातावरण से बाहर ले जाया गया है। इस परिवर्तन ने इसका उपयोग करने के तरीके के इर्द-गिर्द घूमने में असमर्थता प्रदान की है: टॉरॉइडल आंदोलन का उपयोग करने के लिए सरल बाएं से दाएं आंदोलन को प्रतिबंधित किया गया है। लेकिन> <> कार्यक्रम अभी भी लिखे जाते हैं जैसे कि मछली उनके माध्यम से चलने में सक्षम थी। यह आपका कार्य है, प्रिय प्रोग्रामर, एक> <> प्रोग्राम को रैखिक बनाने के लिए एक प्रोग्राम लिखना। और इसे जितना संभव हो उतना कम बाइट्स में करें; मछली के पास बहुत बड़ी यादें नहीं हैं।
> <> में आंदोलन
में> <>, आंदोलन एक समय में toroidal और एक चरित्र है। इसका मतलब है कि मछली (पॉइंटर) एक पंक्ति के अंत से लेकर शुरुआत तक चारों ओर "लपेट" सकती है। > <> में, मछली भी सबसे ज्यादा मूव करने के तरीके के विपरीत, टॉप-बॉटम, बॉटम-टू-टॉप और राइट-टू-लेफ्ट को हिलाने में सक्षम है। तो यह आंदोलन पैटर्न मान्य होगा:
>>>^ >>>v
>>>^ v
और यह एक अनंत लूप पर समाप्त होता है (शीर्ष पंक्ति में एक बार पीछे की ओर जाता है, जब तक कि यह अनंत रूप से नीचे न आ जाए)।
मछली अधिकतम (पंक्ति की लंबाई) और पंक्तियों की संख्या के बराबर ऊँचाई के ग्रिड में चलती है।
आप कैसे पता लगाते हैं कि मछली किस रास्ते पर चलती है? ये आदेश आंदोलन की दिशा वेक्टर को बदलते हैं (उदाहरण के लिए (-1,0)
दाएं-से-बाएं):
Command | Direction Change
---------------------------
> | (1,0) (default)
< | (-1,0)
^ | (0,1)
v | (0,-1)
/ | (x,y) -> (y,x)
\ | (x,y) -> (-y,-x)
| | (x,y) -> (-x,y)
_ | (x,y) -> (x,-y)
# | (x,y) -> (-x,-y)
; | (0,0)
जैसा कि कहा गया है, मछली बाएं-से-दाएं यानी दिशा वेक्टर के साथ आगे बढ़ना शुरू कर देती है (1,0)
। मछली पहले से शुरू होने वाले आदेशों को देखती है और अगर कमांड एक उपर्युक्त परिवर्तक में से एक से मेल खाती है तो उसकी दिशा बदलना शुरू कर देती है।
जब यह एक ;
कार्यक्रम को देखता है और समाप्त हो जाता है तो मछली चलना बंद कर देती है।
इनपुट
इनपुट STDIN के माध्यम से दिया गया एक मान्य (उदाहरण के लिए असीम रूप से लूपिंग) प्रोग्राम नहीं होगा। आप चाहें तो एक फ़ाइल भी पढ़ सकते हैं। प्रत्येक कार्यक्रम की पंक्तियाँ जरूरी समान लंबाई की नहीं होंगी ।
इनपुट को एक स्ट्रिंग के रूप में दिया गया है, जिसमें प्रोग्राम में प्रत्येक पंक्ति को अलग करने वाली नई रेखाएँ हैं।
कार्यक्रम लूप नहीं करेंगे, जिसका अर्थ यह भी है कि वे हमेशा ए के साथ समाप्त होंगे ;
।
उत्पादन
आउटपुट प्रोग्राम को रैखिक बनाया जाएगा। यही है, आपको सभी पात्रों (दिशा परिवर्तक सहित) को वापस करना चाहिए जो कि मछली को देखेगा यदि वह कार्यक्रम "सामान्य रूप से" चला। यह इसके रास्ते के सभी पात्र हैं ;
।
यदि इनपुट में असमान लंबाई की रेखाएं हैं और मछली सबसे लंबी लाइन की लंबाई से छोटी रेखा के साथ चलती है, तो आपको यह मान लेना चाहिए कि जैसे मछली एक स्थान पर जा रही थी (परीक्षण मामलों को देखें)।
> <> से परिचित लोग जानते हैं कि दिशा परिवर्तक केवल इसमें आंदोलन करने का एकमात्र तरीका नहीं है, बल्कि सादगी के लिए इनपुट का व्यवहार करते हैं जैसे कि वे आंदोलन को प्रभावित करने का एकमात्र तरीका हैं।
नियम
- मानक खामियां लागू होती हैं
- आप या तो एक पूर्ण कार्यक्रम या फ़ंक्शन लिख सकते हैं
- इनपुट को STDIN या एक फ़ाइल के माध्यम से आपूर्ति की जाती है, जिसमें स्ट्रिंग को प्रोग्रामलाइनों से अलग किया जाता है जिसे newlines द्वारा अलग किया जाता है (
\n
)- आप इनपुट को अलग तरीके से ले सकते हैं, कारण के बिना (मुझे पूछने के लिए स्वतंत्र महसूस करें कि क्या आपके पास एक विशिष्ट प्रकार का इनपुट है)। आप रिक्त स्थान के साथ इनपुट को पैड नहीं कर सकते हैं ताकि लाइन की लंबाई मेल खाए।
- लचीले इनपुट के संबंध में इस मेटा पोस्ट का संदर्भ लें । जैसा कि यह पोस्ट करने के लिए खड़ा है, आम सहमति कारण के रूप में संभव के रूप में लचीला होना है।
- आउटपुट STDOUT के माध्यम से एक स्ट्रिंग है या फ़ंक्शन द्वारा लौटाया जाता है (आप क्या करना चाहते हैं इसके आधार पर, नियम 2 देखें)
परीक्षण के मामलों
v >v
>abcv//;
gfed<^ih
v>abcv<defghi^//>v;
v >v
>abcv//;
gfed<^
v>abcv<defg ^//>v;
abcdef;
abcdef;
abcd|;
abcd|dcba;
abcd#;
abcd#dcba;
abcd\;
_
abcd\_\dcba;
^;
>abcde/
^jihg<
^ >abcde/ <ghij^a;
;
;