यहाँ कुछ सुझाव:
स्थिरांक:
Esolangs 'स्थिरांक पेज विशिष्ट मान बनाने के लिए कम से कम तरीकों में से एक अत्यंत उपयोगी सूची है। मैं अपने आप को इस कार्यक्रम में प्रति कार्यक्रम कम से कम दो बार परामर्श देता हूं।
सब कुछ की शुरुआत:
+++[[<+>>++<-]>]
यह टेप को प्रारूप 3 * n ^ 2 में सेट करता है, जो दिखता है
3 6 12 24 48 96 192 128 0 0 '
यह क्यों इतना महत्वपूर्ण है?
चलो सूची में नीचे जाते हैं:
- 3 और 6 बोरिंग हैं
- 12: करीब 10 (न्यूलाइन) या 13 (गाड़ी वापसी)। 0-9 के लिए काउंटर के लिए भी इस्तेमाल किया जा सकता है
- 24: 26 के करीब, वर्णमाला में अक्षरों की संख्या
- 48: ASCII के लिए
0
- 96: 97 के करीब, ASCII के लिए
a
- 196 और 128: 196-128 = 64, 65 के करीब, ASCII के लिए
A
।
इस एक एल्गोरिथ्म से, हम ASCII रेंज में व्यावहारिक रूप से प्रत्येक अनुक्रम की शुरुआत में हैं, साथ ही प्रत्येक के लिए एक काउंटर और आसान पहुंच में एक नई रेखा।
एक व्यावहारिक उदाहरण:
सभी अपरकेस और लोअरकेस अक्षरों और अंकों को प्रिंट करना।
एल्गोरिथ्म के साथ:
+++[[<+>>++<-]>]<<[-<->]<<<<++[->>+.>+.<<<]<--[>>.+<<-]
के बिना:
+++++++++++++[->+++++++>++>+++++>++++>+<<<<<]>+++++>[-<+.>>.+<]>>---->---[-<.+>]
हम दूसरे उदाहरण में टेप को इनिशियलाइज़ करते हुए अधिकांश बाइट्स खर्च करते हैं । इसमें से कुछ इसे पहले उदाहरण में अतिरिक्त आंदोलनों द्वारा ऑफसेट करते हैं, लेकिन इस पद्धति का स्पष्ट रूप से लाभ है।
एक ही नस में अन्य दिलचस्प एल्गोरिदम की एक जोड़ी:
3 * 2 ^ n + 1:
+++[[<+>>++<-]+>]
Tape: 4 7 13 25 49 65 197 129 1 0'
यह मानों को 1 से दूर करता है, जो कुछ चीजों को पूरा करता है। यह 12 कैरिज रिटर्न, 64 अपरकेस वर्णमाला की वास्तविक शुरुआत और 24 को 26 के करीब बनाता है।
2 ^ n:
+[[<+>>++<-]>]
Tape: 1 2 4 8 16 32 64 128
क्योंकि 64 अपरकेस अक्षरों के लिए अच्छा है, 32 अंतरिक्ष के लिए ASCII है, और 128 का उपयोग 26 (130/5 = 26) के लिए काउंटर के रूप में किया जा सकता है। यह कुछ स्थितियों में बाइट्स को बचा सकता है जहां अंक और लोअरकेस अक्षरों की आवश्यकता नहीं होती है।
प्रश्न के अनुकूल कार्यान्वयन चुनें:
- नकारात्मक कोशिकाएं लगभग हमेशा होती हैं उपयोगी होती हैं, और उनसे बचने का कोई कारण नहीं है (जब तक कि यह आपके बायटेकाउंट को नहीं बदलता है)
- रैपिंग सेल के साथ लगभग एक ही बात, और भी अधिक क्योंकि कई स्थिरांक रैपिंग का उपयोग करते हैं।
- मनमाने सेल क्रम अनंत गणित अनुक्रमों के लिए उपयोगी होते हैं, जैसे कि फाइबोनैचि अनुक्रम को असीम रूप से गणना करना (
+[[-<+>>+>+<<]>]
), या बड़ी / नकारात्मक संख्याओं को संसाधित करना। नकारात्मक पक्ष यह है कि कुछ सामान्य विधियां, जैसे कि [-]
और [->+<]
पर भरोसा नहीं किया जा सकता है, बस संख्या नकारात्मक है।
- EOF के रूप में 0, -1 या कोई परिवर्तन नहीं। 0 आमतौर पर बेहतर होता है, क्योंकि आप अतिरिक्त जांच के बिना पूरे इनपुट पर लूप कर सकते हैं। सरणी संरचनाओं पर लूपिंग करते समय -1 उपयोगी है। मुझे अभी तक कोई बदलाव नहीं मिला है :(
फ्रिक क्या चल रहा है, उस पर नज़र रखें:
हर समय आपके पास टिप्पणियाँ होनी चाहिए जहाँ सूचक इसके आस-पास डेटा के संबंध में होना चाहिए, और सुनिश्चित करें कि आप प्रत्येक सेल के संभावित मानों की सीमा जानते हैं। यह विशेष रूप से महत्वपूर्ण है जब आपने सूचक को लूप से पहले विभाजित किया है, क्योंकि आप बाद में एक साथ दो संभावनाओं से जुड़ना चाहते हैं।
किसी भी बिंदु पर, मेरा कोड इस तरह दिखने वाली हर दूसरी पंक्ति पर टिप्पणियों से अटा पड़ा है:
*0 *dat a_1 ? 0' !0 0*
or
*0 *dat 0' ap1 0 !0 0*
कुछ अतिरिक्त सलाह प्रतीकों को विशेष अर्थ देने के लिए है। उपरोक्त उदाहरण में, '
पॉइंटर जहां है, *
उस दिशा में पुनरावृत्ति का मतलब है, ?
अज्ञात मान वाले सेल का !0
अर्थ है, गैर-शून्य सेल, _
इसका एक विकल्प है -
और p
इसका विकल्प है +
। or
तात्पर्य यह है कि टेप या तो प्रतिनिधित्व की तरह लग सकता है, और इस तरह से संभाला जाना चाहिए।
आपकी प्रतीक योजना के लिए मेरा (जो कुछ खामियां हैं) के समान होना आवश्यक नहीं है, यह सिर्फ सुसंगत होना है। डिबगिंग करते समय यह भी बहुत उपयोगी है, क्योंकि आप इसे उस बिंदु तक चला सकते हैं और वास्तविक टेप की तुलना आपके पास क्या होना चाहिए , जो आपके कोड में संभावित खामियों को इंगित कर सकते हैं।