05AB1E में गोल्फ के लिए टिप्स


28

क्या आपके पास 05AB1E में इनग के लिए कोई सुझाव है , अदनान द्वारा बनाई गई गोल्फ भाषा ?

आपकी युक्तियां कम से कम 05AB1E के लिए कुछ विशिष्ट होनी चाहिए।

कृपया प्रति उत्तर एक टिप पोस्ट करें।


2
समीक्षा से: युक्तियाँ प्रश्न विषय पर हैं।
mbomb007

जवाबों:


20

चूंकि यह 05AB1E के GitHub पृष्ठों पर विकी का हिस्सा नहीं था (मुझे लगता है कि यह होना चाहिए), मैं इसे अभी यहाँ जोड़ने जा रहा हूँ कि मैं इसे बेहतर ढंग से खुद समझूँ

शब्दकोश का उपयोग कैसे करें?

05AB1E निम्नलिखित है words.ex शब्दकोश फ़ाइल सभी शब्द यह जानता हैं। लेकिन हम इस शब्दकोश में शब्दों का उपयोग कैसे करते हैं? आइए शब्द "testing"को उदाहरण के रूप में लें:

"testing"शब्दकोश फ़ाइल की 1453 पंक्ति पर पाया जा सकता है। चूंकि पहली दो पंक्तियों में शब्द नहीं हैं, और हमें 0-अनुक्रमित शब्द की आवश्यकता है, हम 3. घटाते हैं।
इसलिए, अब हमारे पास सूचकांक ( 1450) है, लेकिन इसका उपयोग कैसे करें?

हम खोलने के लिए और के साथ एक संकुचित स्ट्रिंग शुरू । हम फिर info.txt फ़ाइल के दूसरे कॉलम को देखते हैं । (तो ०० है; ०१ है; आदि) इस साधन
के मामले में (१४) और (५०)।"testing"î»

के लिए संकुचित स्ट्रिंग "testing"इसलिए है: “ इसे ऑनलाइन आज़माएं। कोड के लगभग सभी 05AB1E टुकड़ों के साथ, यदि आप स्ट्रिंग का उपयोग नहीं करते हैं , तो अनुगामी वैकल्पिक है, इसलिए इस मामले में भी काम नहीं करता है

ध्यान देने योग्य कुछ बातें:

सभी वर्ण जिनके पास info.txt फ़ाइल में कोई अनुक्रमणिका नहीं है, का उपयोग किया जा सकता है। यह sविलक्षण शब्द के बजाय बहुवचन को जोड़ने या ,.?!उदाहरण के लिए विराम चिह्न का उपयोग करने के लिए उपयोगी हो सकता है ।
ÿ(स्ट्रिंग-इंटरपोलेशन) का उपयोग तब भी किया जा सकता है जब आप स्ट्रिंग के भीतर स्टैक से मान सम्मिलित करना चाहते हैं।
नोट: प्रत्येक ढीला वर्ण जिसमें कोई भी सूचकांक नहीं है। सूचना फ़ाइल में नीचे संपीड़न प्रकारों के लिए एक शब्द के रूप में गिना जाता है।

संकुचित तार आप उपयोग कर सकते हैं के विभिन्न प्रकार के होते हैं:

  • ': एक एकल संपीड़ित शब्द लें, जो 'आवश्यक नहीं है ( आवश्यक नहीं है) - 'î»: "परीक्षण"
  • : अंतरिक्ष सीमांकक के साथ दो संकुचित शब्द लेता है (कोई अनुगामी आवश्यक नहीं) - „î»î»: "परीक्षण परीक्षण"
  • : अंतरिक्ष सीमांकक के साथ तीन संकुचित शब्द लेता है (कोई अनुगामी आवश्यक नहीं) - …î»î»î»: "परीक्षण परीक्षण परीक्षण"
  • : अंतरिक्ष सीमांकक के साथ संकुचित स्ट्रिंग लें - “î»î»“: "परीक्षण परीक्षण"
  • : संपीड़ित स्ट्रिंग को बिना निहित स्थानों के ले लो - ’î»î»’: "टेस्टिंगटाइटिंग"
  • : अंतरिक्ष परिसीमन के साथ शीर्षक-मामले में संकुचित स्ट्रिंग लें - ”î»î»”: "परीक्षण परीक्षण"
  • : पूर्ण परिधि के साथ संपीड़ित स्ट्रिंग को अंतरिक्ष सीमांकक के साथ लें - ‘î»î»‘: "परीक्षण परीक्षण"

यहाँ शब्दों के अंतरिक्ष-सीमांकित इनपुट के आधार पर संपीड़ित स्ट्रिंग प्राप्त करने के लिए एक उपयोगी कार्यक्रम है:

'“? lAð«Ã#¸˜ vyU "€‚ƒ„…†‡ˆ‰Š‹ŒŽ•–—™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîï" Dâ vy"“ÿ“".V XlQi y?1#] '“,

इसे ऑनलाइन आज़माएं।

यह कार्यक्रम होगा:

  1. इनपुट को लोअरकेस के रूप में लें, किसी भी गैर-अक्षर वर्णों (रिक्त स्थान को छोड़कर) को हटाता है, और फिर रिक्त स्थान द्वारा शब्दों को विभाजित करता है ( lAð«Ã#), या सूची में शब्दों को लपेटता है यदि केवल एक शब्द इनपुट किया गया था ( ¸˜)
  2. प्रत्येक शब्द पर लूप ( vyU)
  3. फिर शब्दकोश ( "€...ï"Dâvy) से प्रत्येक संकुचित शब्द पर एक आंतरिक लूप है , जिसे वह 05AB1E प्रोग्राम ( "“ÿ“".V) के रूप में चलाने की कोशिश करेगा
  4. और अगर यह वर्तमान शब्द के बराबर है तो यह इसे प्रिंट करेगा और आंतरिक लूप को तोड़ देगा XlQiy?1#

एक इनपुट good bye worldके साथ आउटपुट इसलिए होगा “‚¿Þ¡‚ï“इसे ऑनलाइन आज़माएं।

नोट: आपको अभी भी यह देखना होगा कि इस जनरेटर के काम करने के लिए शब्द शब्दकोश में मौजूद है या नहीं, और यह किसी विशेष वर्ण या बहुवचन शब्दों को अनदेखा करेगा। केवल वही शब्द जो शब्दकोश में बिल्कुल समान हैं, मिल जाएंगे।

यहां एक उदाहरण है जहां मैं …Ÿ™‚ï!स्ट्रिंग के लिए उपयोग करता हूं "हैलो वर्ल्ड!" और ’‚¿Þ¡ ÿ ‚ï!’स्ट्रिंग के लिए "अलविदा! दुनिया!"। ध्यान दें कि रिक्त स्थान और विस्मयादिबोधक चिह्न का उपयोग किस प्रकार किया जाता है, क्योंकि उनके पास info.txt फ़ाइल में सूचकांक नहीं हैं। इसके अलावा, यह ÿ"क्रूर" सम्मिलित करने के लिए उपयोग करता है जो स्टैक के शीर्ष पर था, जो दुर्भाग्य से शब्दकोष का हिस्सा नहीं था (लेकिन नीचे अनुभाग में विधि का उपयोग करके अभी भी संकुचित था)।

तार को संपीड़ित करने के लिए कैसे शब्दकोश का हिस्सा नहीं है?

हालाँकि, word.ex डिक्शनरी फ़ाइल बहुत बड़ी है (10,000 शब्द सटीक होने के लिए), यह हो सकता है कि आपको एक ऐसे शब्द की आवश्यकता हो, जो इसका हिस्सा न हो, या एक स्ट्रिंग जो सिर्फ सादा गिब्रिश हो। तो क्या उन को भी संकुचित करने का कोई तरीका है?
वहाँ निश्चित रूप से, का उपयोग करके .•, जो एक संकुचित आधार 255 वर्णमाला आधारित स्ट्रिंग है। नोट: इस विधि का उपयोग केवल लोअरकेस वर्णमाला और रिक्त स्थान के वर्णों के लिए किया जा सकता है।

यहां एक शब्द / स्ट्रिंग को संपीड़ित आधार-255 वर्णमाला आधारित स्ट्रिंग में बदलने के लिए एक उपयोगी कार्यक्रम है:

vAyk})> 27β 255B ".•ÿ•"

इसे ऑनलाइन आज़माएं।

इस कार्यक्रम के ऊपर क्या है:

  • vAyk})>: इनपुट के अलग-अलग अक्षरों के 1-अनुक्रमित वर्णमाला सूचक को लें, जिसमें रिक्त स्थान 0 हो
  • 27β: इन सूचकांकों को आधार संख्या से एकल संख्या में परिवर्तित करें
  • 255B: 05AB1E के स्वयं के कोड पेज का उपयोग करके इस संख्या को Base-255 में बदलें
  • ".•ÿ•": इस संकुचित स्ट्रिंग से पहले एक अग्रणी .•और अनुगामी स्थान

यहां एक उदाहरण का जवाब है जहां @Kaldo.•zíΘ• शब्द "हंस" को संपीड़ित करने के लिए उपयोग करता है।

बड़े पूर्णांक को कैसे संपीड़ित करें?

मान लीजिए कि हम किसी चीज़ के लिए बहुत बड़ी संख्या का उपयोग करना चाहते हैं, लेकिन यह वास्तव में पॉव-गणना द्वारा पुनर्प्राप्त नहीं किया जा सकता है। उदाहरण के लिए, मान लें कि हम 18238098189071058293किसी भी कारण से बड़े पूर्णांक तक पहुँच प्राप्त करना चाहते हैं ।

इस मामले में हम प्रारूप में एक संख्या को संपीड़ित करने के लिए एक अग्रणी और अनुगामी दोनों का उपयोग कर सकते हैं [1-9][0-9]+
ऊपर का उदाहरण नंबर बन जाएगा •15Y₁Ò'Θpc•इसे ऑनलाइन आज़माएं। फिर से, संकुचित शब्दकोश स्ट्रिंग के साथ की तरह, अनुगामी वैकल्पिक रूप से हटाया जा सकता है

वैकल्पिक रूप से, जब पूर्णांक छोटा होता है, तो केवल 2 संपीड़ित वर्णों का उपयोग करना होता है, हम Žइसके बजाय उपयोग कर सकते हैं , जिस स्थिति में हमें इसे बंद करने के लिए अनुगामी बाइट की आवश्यकता नहीं होगी और पूर्णांक 4. के बजाय 3 बाइट्स में संपीड़ित है। उदाहरण के लिए, पूर्णांक में 13562परिणाम होगा •rl•, लेकिन क्योंकि यह केवल दो वर्णों का उपयोग करता है, यह Žrlइसके बजाय हो सकता है ।

इसके अलावा, रेंज में संख्याओं को [101, 355]2 बाइट्स में संकुचित किया जा सकता है Ƶऔर साथ ही 05AB1E के कोडपेज से एक अतिरिक्त चरित्र का उपयोग किया जा सकता है । तो उदाहरण के लिए, Ƶ–पूर्णांक के लिए इस्तेमाल किया जा सकता है 250यहां सभी उपलब्ध नंबरों का अवलोकन किया गया है। इन वर्णों को बेस -255 से बेस -10 में बदल दिया जाता है, और फिर 101 जोड़ा जाता है (क्योंकि सीमा में संख्या [0,100]पहले से 1 या 2 बाइट्स हैं)।

ये कैसे 15Y₁Ò'Θpcऔर rlबनाए जाते हैं? बहुत ही सरल, संख्या को 05AB1E के अपने कोडपेज का उपयोग करके बेस-255 में बदल दिया गया है। तो आप निम्नलिखित प्रोग्राम का उपयोग कर सकते हैं एक संकुचित संख्या, जिसके लिए यह तो उपयोग करेगा प्राप्त करने के लिए Ƶ., Ž..या •...•संकुचित पूर्णांक के आकार के आधार:

101 355Ÿså i 101-255B"Ƶÿ" ë 255B Dg2Qi "Žÿ" ë "•ÿ•"

इसे ऑनलाइन आज़माएं।

यहां एक उदाहरण उत्तर दिया गया है जहां @Emigna•3Èñ• पूर्णांक के लिए उपयोग करता है 246060

पूर्णांक सूची कैसे संपीड़ित करें?

कभी-कभी आप एक ही नंबर के बजाय पूर्णांक की पूरी सूची को संक्षिप्त करना चाहते हैं। उदाहरण के लिए, मान लें कि हम [5,93,17,83,4,44,32,19,4,45,83,90,0,14,3,17,17,81]किसी भी कारण से सूची चाहते हैं । इस मामले में, हम इसके बजाय निम्नलिखित का उपयोग कर सकते हैं: •4βŸ{©£MG]q‡dZΘp•94в इसे ऑनलाइन आज़माएं।

यहाँ एक उपयोगी प्रोग्राम जो इस संकुचित संख्या और आधार दोनों को जनरेट करना चाहता है:

Z>© β 255B ®s"•ÿ•ÿв"

इसे ऑनलाइन आज़माएं।

इस कार्यक्रम के ऊपर क्या है:

  • Z>: इनपुट-सूची की अधिकतम संख्या + 1 प्राप्त करें ( ©और इसे रजिस्टर में संग्रहीत करें)
  • β: इनपुट सूची को आधार max+1से एकल संख्या में परिवर्तित करें
  • 255B: इस एकल संख्या को संपीड़ित करें (जैसा कि हमने ऊपर अनुभाग में किया था)
  • ®s"•ÿ•ÿв": प्रारूप में परिणाम देता है: अग्रणी , संपीड़ित संख्या , अधिकतम, 1, अनुगामीв

यहां एक उदाहरण का उत्तर है जहां मैं •4Œ”dóŒfÝŸĀTUÕáOyÖOÀÁàu¼6¹₆Žr‡_›y³eß₂©ǝ²ƶ"SAÎAñ'¡û†Ø(•91вसूची को संक्षिप्त करने के लिए उपयोग करता हूं [85,30,29,39,28,37,33,88,31,40,34,89,35,41,32,90,36,38,42,43,44,60,45,61,46,62,47,63,48,64,49,65,81,50,66,51,67,52,68,53,69,86,54,70,87,55,71,56,72,82,57,73,79,80,58,74,59,75,76,77,78,83,84]
पुनश्च: इस उत्तर •6j|eDEJÞó(ÍêΓλùÄÞKüzHÇ-ø`JδŠ₂+Öηôî®À8†6/ðÎ6ùøΓ°ÓĆ;ˆ©Ā•2ôमें एक बराबर-बाइट्स (57) विकल्प है, क्योंकि सभी संख्याओं के ठीक दो अंक हैं। कुछ मामलों में (विशेष रूप से छोटी सूचियाँ) यह एक छोटा विकल्प हो सकता है।

पूर्णांक संपीड़न बनाम पूर्णांक सूची संपीड़न:

इन दोनों के साथ यह किसी भी तरह से जा सकता है। कभी-कभी एक संकुचित सूची छोटी होती है, कभी-कभी एक संपीड़ित पूर्णांक, कभी-कभी एक पूरी तरह से अलग विकल्प छोटा होता है। इसलिए हमेशा ऊपर के जनरेटर पर पूरी तरह से भरोसा करने के बजाय, अपने स्वयं के निर्णय और गोल्फ कौशल का उपयोग संभवतः गोल्फ चीजों को आगे बढ़ाने के लिए करें। यहाँ कुछ उदाहरण हैं:

[44, 59]( @Emigna के इस उत्तर में प्रयुक्त ):

  • •A–•60в 7 बाइट्स (संकुचित पूर्णांक सूची जनरेटर द्वारा उत्पन्न) है
  • •H|•2ôया •H|•2äहार्डकोड 44 59‚सभी 6 बाइट्स हैं
  • ŽH|2ôया ŽH|2äदोनों 5 बाइट्स हैं
  • लेकिन इस मामले में, „,;Ç4 बाइट्स सबसे अच्छा विकल्प होगा (वर्णों के कोडप्वाइंट ',' और ';');

[2,4,6,0]( @Emigna के इस उत्तर में प्रयुक्त ):

  • •3ā•7в 6 बाइट्स (संकुचित पूर्णांक सूची जनरेटर द्वारा उत्पन्न) है
  • Ž3ā7в 5 बाइट्स है
  • लेकिन इस मामले में, Ž9¦S4 बाइट्स सबसे अच्छा विकल्प होगा (अंकों की सूची में पूर्णांक 2460 संकुचित)

10101001100101001( मेरे इस उत्तर में प्रयुक्त ):

  • •a½₄Ƶ6®í• 9 बाइट्स (संकुचित बड़े पूर्णांक जनरेटर द्वारा उत्पन्न) है
  • •1∊}•2вJ 8 बाइट्स हैं (जोड जॉइन के साथ कंप्रेस्ड पूर्णांक सूची जनरेटर द्वारा उत्पन्न)
  • लेकिन इस मामले •1∊}•bमें 6 बाइट के साथ सबसे अच्छा विकल्प होगा (संकुचित पूर्णांक सूची, बाइनरी के बजाय बाइनरी के साथ , जिसमें निहित है)

[85,30,29,39,28,37,33,88,31,40,34,89,35,41,32,90,36,38,42,43,44,60,45,61,46,62,47,63,48,64,49,65,81,50,66,51,67,52,68,53,69,86,54,70,87,55,71,56,72,82,57,73,79,80,58,74,59,75,76,77,78,83,84]( मेरे इस उत्तर में प्रयुक्त ):


12

निहित इनपुट

उन दिनों में जब 05AB1E जारी किया गया था, अंतर्निहित इनपुट काफी नया और फैंसी था। आजकल अन्य प्रतिस्पर्धी भाषाओं (जैसे जेली, MATL, पायथ, आदि) के साथ नज़र रखने के लिए यह आवश्यक प्रतीत होता है।

उदाहरण के लिए, जब आप दो नंबर जोड़ना चाहते हैं, आप कर सकते हैं II+:

I    # Input_1.
 I   # Input_2.
  +  # Add them up.

इसका परीक्षण यहां करें


हालांकि, निहित इनपुट का उपयोग करके , हम केवल 1 बाइट को छोटा कर सकते हैं, अर्थात् +:

+    # Take two numbers implicitly and add them up.

इसका परीक्षण यहां करें


यह केवल तब होता है जब स्टैक की लंबाई ऑपरेटर की समता से छोटी होती है। एक अंतिम उदाहरण है 3++ऑपरेटर की समता 2 है जबकि स्टैक में केवल 1 तत्व है:

3    # Push the number 3 on top of the stack.
 +   # Request implicit input and add to the 3.

इसका परीक्षण यहां करें


8

सबस्ट्रिंग

£bस्ट्रिंग के पहले अक्षर लेने के लिए कमांड है a
उदाहरण के लिए: "hello_world"5£ -> "hello"

लेकिन अगर bसूचकांकों की सूची है, तो इसके बजाय उन आकारों के (स्ट्रिंग तक) भागों में स्ट्रिंग को विभाजित करता है।
उदाहरण के लिए: "hello_world"5L£ -> ['h', 'el', 'lo_', 'worl', 'd']


8

पूर्वनिर्धारित चर

वे 05AB1E में थोड़े छिपे हुए हैं। यहां सभी पूर्वनिर्धारित चर की एक सूची दी गई है:

  • ¾, धक्का देता है 0यदि इस कमांड से पहले counter_variable नहीं बदला जाता है।
  • X, धक्का 1अगर चर एक्स के साथ इस आदेश से पहले नहीं बदला है U
  • Y, धक्का देता है 2यदि चर Y इस आदेश से पहले नहीं बदला गया है V
  • ®, धक्का देता है -1कि क्या रजिस्टर इस कमांड के साथ पहले नहीं बदला गया है ©
  • ¯, पुश [](खाली सरणी) यदि इस कमांड से पहले global_array में कुछ भी नहीं जोड़ा गया है।
  • ¸[""]कोई इनपुट न होने पर खाली स्टैक पर धक्का देता है। (इसको ढूंढने के लिए @Emigna का शुक्रिया।)

24
¾धक्का 0 => यह गैर-
महामारी के

6
@ घातक: 0 पुश 0 के रूप में अच्छी तरह से। ¾एक काउंटर वैरिएबल को पुश करता है जिसे 0. के रूप में आरंभीकृत किया गया है। यदि आप केवल 0 को पुश करना चाहते हैं, तो बेशक अधिक प्राकृतिक है, लेकिन यदि आप पुश करना चाहते हैं 5,0,7, 5¾7तो 2 बाइट्स से कम है 5 0 7
एमिग्ना

7
वापस मेरे दिन में, ¾मतलब है .75, और मैंने एक बार उस तथ्य के साथ पायथ को हराया । इन नए गोल्फ की भाषाओँ में
मानविकी के

31
पता नहीं आप सभी क्या बात कर रहे हैं: पी। print(3 / 4)अजगर 2 में मुझे देता है 0
अदनान

2
यदि शुरुआत में, Mधक्का -Inf
mbomb007

7

कैनवास का उपयोग ( Λया )

चूँकि यह डॉक्स का हिस्सा नहीं था, और @ अदनान अभी इसे लिखने में थोड़ा व्यस्त है, मैंने इसे अभी के लिए यहां टिप के रूप में जोड़ने की अनुमति मांगी।

कैनवस फ़ंक्शन ( Λया ) का उपयोग स्क्रीन पर ASCII-lines को खींचने के लिए किया जा सकता है। इसके तीन आवश्यक पैरामीटर हैं:

  • एक लंबाई: लाइन का आकार। यह एक पूर्णांक, या पूर्णांकों की सूची हो सकती है
  • b स्ट्रिंग: वह चरित्र जिसे हम प्रदर्शित करना चाहते हैं। यह एक एकल वर्ण, एक स्ट्रिंग, वर्णों की एक सूची या तार की एक सूची हो सकती है (पिछले तीन मामलों में यह उन सभी को एक-एक-एक का उपयोग करेगा जिसमें रैप-अराउंड भी शामिल है)
  • c दिशा: चरित्र-रेखाओं को जिस दिशा में खींचना चाहिए, सामान्य तौर पर हमारे पास[0,7]दिशाओं के लिएअंक होते हैं, जिसके लिए हम एक या एकाधिक का उपयोग कर सकते हैं। कुछ विशेष विकल्प भी हैं जिन्हें एक निश्चित चरित्र (बाद में इसके बारे में अधिक) की आवश्यकता होती है।

[0,7]निम्नलिखित दिशाओं के लिए दिशा-अंक का नक्शा:

7   0   1
  ↖ ↑ ↗
6 ← X → 2
  ↙ ↓ ↘
5   4   3

कुछ उदाहरण 05AB1E उत्तर जहां कैनवास का उपयोग किया जाता है:

चलो पिछले एक के समान कुछ करते हैं, इसलिए मान लें कि हम Λनिम्नलिखित तीन मापदंडों के साथ कैनवास फ़ंक्शन का उपयोग करते हैं :

  • a :[3,3,5,5,7,7,9,9]
  • बी :!@#
  • सी :[0,2,4,6]

यह निम्न आउटपुट देगा:

  !@#!@#!
  #     @
  @ #!@ #
  ! @ # !
  # ! ! @
  @   @ #
  !#@!# !
        @
@!#@!#@!#

इसे ऑनलाइन आज़माएं।

तो यह कैसे काम करता है? ठीक है, यहाँ ऊपर इन इनपुट्स के साथ चरण दिए गए हैं:

  1. 3वर्ण ( !@#) ऊपर की ओर (दिशा 0) खींचें
  2. सही (दिशा ) की ओर 3-1वर्ण बनाएं !@( 2)
  3. 5-1वर्ण ( #!@#) नीचे की ओर (दिशा 4) खींचें
  4. 5-1अक्षर ( !@#!) को बाईं ओर खींचें (दिशा 6)
  5. 7-1वर्ण ( @#!@#!) ऊपर की ओर (दिशा 0) खींचें
  6. सही (दिशा ) की ओर 7-1वर्ण बनाएं @#!@#!( 2)
  7. 9-1वर्ण ( @#!@#!@#) नीचे की ओर (दिशा 4) खींचें
  8. 9-1अक्षर ( !@#!@#!@) को बाईं ओर खींचें (दिशा 6)

-1क्योंकि लाइनों ओवरलैप होते हैं। तो पहले दो चरण हैं:

#
@
!

तथा

 !@

जो संयुक्त है:

#!@
@
!

कुछ छोटे नोट:


1
मुझे यह भी पता नहीं था कि 05AB1E में एक कैनवास था!
MilkyWay90

कैसे ... आपने यह कैसे पता लगाया? सोर्स कोड?
मैजिक ऑक्टोपस Urn

1
@MagicOctopusUrn @ अदनान के इस उत्तर से अधिकांश (PS: उसका नवीनतम उत्तर बहुत अच्छी तरह से समझाया गया है )। के लिए +×8मैं वास्तव में स्रोत कोड में देखा है।
केवि क्रूज़सेन

5

पॉप या मिलता है

अन्य स्टैक-आधारित भाषाओं की तरह, 05AB1E के फ़ंक्शन आमतौर पर स्टैक से अपने इनपुट को पॉप (उपभोग) करते हैं और स्टैक पर अपने आउटपुट को धक्का देते हैं।

हालांकि, कुछ फ़ंक्शन बिना खपत किए स्टैक से उनके इनपुट प्राप्त करते हैं। एक उदाहरण headफ़ंक्शन है, ¬जो इनपुट सूची से पहला तत्व पैदा करता है। एक उदाहरण के कार्यक्रम यहाँ देखें: ¬+। यह उस सूची के प्रत्येक नंबर पर इनपुट सूची का पहला नंबर जोड़ता है।

यह जानने के लिए कि कौन से कार्य पॉप और कौन से हैं, फ़ंक्शन जानकारी फ़ाइल में संबंधित कॉलम देखें


@NeilA। धन्यवाद! लिंक अपडेट किया गया
लुइस मेंडू

3

सशर्त और लूप

लूप और सशर्त स्वचालित रूप से एक कार्यक्रम के अंत में क्लोजिंग ब्रैकेट प्राप्त करते हैं, इसलिए आपको केवल लूप / सशर्त के बाहर कुछ करने की आवश्यकता होने पर उन्हें कोड में जोड़ना होगा।

उदाहरण के लिए, पहले nअभाज्य संख्याओं की सूची बनाने वाले इस (अनगुल्ड) कार्यक्रम को समापन कोष्ठक की आवश्यकता नहीं है। [¹¾Q#NpiNˆ¼

लेकिन अगर हम परिणामी सूची पर कुछ ऑपरेशन करना चाहते हैं, उदाहरण के लिए डेल्टा के वीट लेने के लिए हमें पहले लूप को बंद करना होगा। [¹¾Q#NpiNˆ¼]¯¥


3

छोटे 05AB1E गोल्फ टिप्स

छोटे गोल्फ टिप्स के साथ इसका विस्तार करूंगा, जो मैंने रास्ते में सीखा। (केवल व्यक्तिगत रूप से 05AB1E शुरू किया गया।)

  • D(डुप्लिकेट) और Ð(तीन प्रतियों) के साथ संयोजन में s(स्वैप) और Š(ट्रिपल स्वैप a,b,cकरने के लिए c,a,b) आम तौर पर उपयोग की तुलना में छोटे होते हैं ©(में बचाने global_variable ) और ®(धक्का global_variable ) छोरों के अंदर। इसने मेरे इस उत्तर में एक बाइट को बचाया , साथ ही साथ इस उत्तर में दो भी ।
  • ½(यदि 1 है, तो काउंटर_वर्जेबल को 1 से बढ़ाएं ) एक के अंत में आवश्यक नहीं है µ(जबकि काउंटर_वर्जेबल ! = ए, डू ...), क्योंकि यह अंतर्निहित रूप से किया गया है ( मेरा इस उत्तर में एक बाइट बचाया )।
  • .Bनई लाइनों पर स्पष्ट रूप से विभाजित है। यह मेरे इस उत्तर में उपयोगी था जब हम ¡खाली वस्तुओं को रखते हुए (विभाजन) के लिए एक विकल्प की तलाश कर रहे थे (नोट: लिंक किए गए उत्तर में समाधान काम नहीं करता है जब तत्वों में विभाजन के बाद अनुगामी स्थान होते हैं।) - उम्मीद है कि एक बिलिन। विभाजित करने के लिए जोड़ा जा सकता है, लेकिन भविष्य में खाली लाइनें रखें।
  • (इनपुट-पूर्णांक के कौन से अंक समान रूप से इनपुट-पूर्णांक को विभाजित कर सकते हैं) अंकों के लिए खुद ही नंबर होगा 0(विभाजित-शून्य त्रुटियों के बजाय)। उदाहरण के लिए, 1053परिणाम होगा[1,1053,0,1] (1053 1 और 3 से विभाज्य है; 5 से विभाज्य नहीं है; और 0 के लिए विभाजन-दर-शून्य त्रुटि देता है)। यह सूची की शक्ति लेने से मेरा इस उत्तर में बहुत उपयोगी था , क्योंकि केवल 105AB1E में सच्चाई है और बाकी सब कुछ गलत है। SÖPसत्य (जिसके परिणामस्वरूप 1) का अर्थ है कि एक इनपुट-पूर्णांक अपने प्रत्येक अंक द्वारा समान रूप से विभाज्य है।
  • देखने के बाद û(एक दिए गए स्ट्रिंग को पैलिंड्रोमाइज़ करें ) मुझे आश्चर्य हुआ कि कोई is_palindrome बिलिन नहीं है । लेकिन बाद में मुझे एहसास हुआ कि इसे पूरा करने के लिए केवल 2 बाइट्स की आवश्यकता होती है, जो हैं ÂQ(जहां Âद्विभाजित है, जो इसके लिए छोटा है DR: डुप्लिकेट और रिवर्स कॉपी; और Qयह देखना है कि क्या स्टैक पर शीर्ष दो मान समान हैं)।
  • जब आप एक सूची को कई चीजों से फ़िल्टर करना चाहते हैं, तो आमतौर पर एक में संयुक्त होने के बजाय कई ढीले फिल्टर होना सस्ता होता है। क्योंकि जब आपके पास दो फ़िल्टर होते हैं, तो आपको दो-चार फ़िल्टर का उपयोग करने पर Ds*(डुप्लिकेट, स्वैप) के रूप में कार्य करने के लिए (डुप्लिकेट, स्वैप) बनाम की लाइनों के साथ कुछ की आवश्यकता होगी । उदाहरण के लिए: इस चुनौती में हमें चार अंकों की सभी संख्याओं को सूचीबद्ध करना होगा, जिसमें कम से कम एक अंक हो 0, और एक अंक के बराबर अंक हो 9। एक सीमा का उपयोग करने [1000,10000]से चार अंकों की संख्या लंबी हो जाती है, लेकिन फिर आपको दो और फिल्टर के साथ छोड़ दिया जाता है। प्रारंभ में मैंने ₄4°ŸʒD0åsSO9Q*(14 बाइट्स) का उपयोग किया था, लेकिन दो फ़िल्टर का उपयोग करके एक बाइट को बचाया जा सकता है: ₄4°Ÿʒ0å}ʒSO9Q(13 बाइट्स)। (जो बाद में @Grimy ₄4°ŸεW°ö9Qद्वारा (10 बाइट्स) के लिए गोल्फ हो गया।)
  • जब आप पूर्णांक के 0रूप में पूर्णांक के साथ ज़िप करना चाहते हैं , तो आप उपयोग कर सकते हैं । हालांकि इसके साथ एक मुद्दा यह है कि भराव 0एक स्ट्रिंग बन जाएगा "0", इसलिए यदि आप बाद में मिश्रित तार और पूर्णांक के साथ क्रमबद्ध करने का प्रयास करते हैं, तो यह सबसे अधिक संभावना है कि आप जो परिणाम चाहते हैं वह नहीं देगा। यहाँ यह ज़िपित आंतरिक सूचियों को कैसे सॉर्ट करेगा इसका एक उदाहरण है 0ζ€{:। यह ïज़िप के बाद एक स्पष्ट कलाकारों को int ( ) में जोड़कर तय किया जा सकता है , और उसके बाद ही सॉर्ट करें 0ζï€{:। हालांकि, जिप-फिलर के साथ ¾निरंतर का उपयोग करते हुए 0, यह ज़िप के दौरान एक स्ट्रिंग के बजाय पूर्णांक रहने का कारण होगा। तो ¾ζ€{यहाँ एक बाइट बचाएगा। यह टिप @ Mr.Xcoder द्वारा खान के इस उत्तर में एक बाइट को बचाने के लिए प्रदान की गई थी ।
  • यदि आप एक सूची में कई संख्याओं के अंकों को जोड़ना चाहते हैं, तो आप उपयोग कर सकते हैं €SO। हालांकि छोटा उपयोग कर रहा है , जो स्वचालित रूप से वेक्टर हो जाता है। यह टिप @Grimy द्वारा यहां बाइट (और 2 बाइट्स ) को सहेजने के लिए प्रदान की गई थी ।
  • यदि आप केवल गैर-नकारात्मक पूर्णांक के साथ काम कर रहे हैं, और आप फ़िल्टर के अंदर जांचना चाहते हैं कि क्या यह 0 या 1 है, तो आप निश्चित रूप से स्पष्ट का उपयोग कर सकते हैं 2‹। हालांकि, का उपयोग कर !के लिए (भाज्य) भी केवल 1 (truthy) में परिणाम होगा 0और 1, और हर दूसरे मूल्य उच्च (और इस प्रकार falsey, के बाद से ही कुछ में परिणाम होगा 105AB1E में truthy है)। यह टिप यहां बाइट को बचाने के लिए @Grimy द्वारा प्रदान की गई थी ।

2

स्वचालित वैश्वीकरण

ध्यान दें कि 05AB1E में कुछ ऑपरेटर सरणियों पर स्वचालित रूप से वेक्टर करते हैं। उदाहरण के लिए, कोड 5L3+, जो निम्नलिखित छद्म कोड से भिन्न होता है:

[1, 2, 3, 4, 5] + 3

बन जाएगा:

[4, 5, 6, 7, 8]

यदि यह स्वचालित रूप से वेक्टर नहीं करता है, तो आप ऑपरेटर का उपयोग भी कर सकते हैं । यह एक एकल वर्ण कमांड लेता है, और प्रत्येक तत्व पर उस (मोनैडिक) ऑपरेटर का प्रदर्शन करता है। प्रत्येक तत्व को विभाजित करने के लिए एक उदाहरण निम्नलिखित कोड है ( इसे यहां देखें ):

€S

जबकि सामान्य Sऑपरेटर सरणी में प्रत्येक तत्व को विभाजित करेगा और इसे एक ही सरणी ( इसे यहां आज़माएं ) में समतल करेगा ।


आप किसी सरणी में nth एलिमेंट को कैसे असाइन करते हैं?
एंड्रयू साविनिख

@AndrewSavinykh अभी, इसके लिए कोई बिल्ट नहीं है, लेकिन यह कुछ ऐसा है जिसे मैं लागू करना चाहता हूं।
अदनान

@ अदनान मुझे ऐसा करने का एक तरीका मिला। एक और सूची बनाएँ, जिसमें nth इंडेक्स पर भी असाइन करने का मान हो। फिर (इंडेक्स) ñके मान से पहले वाली सूचियों का विलय करें ntio.run/nexus/05ab1e#@2/iw2XiE2Tio81ldHjj//8A
mbomb007

@ mbomb007 यह संभव है, एकमात्र समस्या यह है कि आप सरणी को बाद में संशोधित नहीं कर सकते हैं, क्योंकि मर्ज कमांड केवल तर्कों के रूप में स्ट्रिंग लेता है (और सूची को स्ट्रिंग में परिवर्तित करता है)।
अदनान

2

इनपुट्स का आदेश

यदि आप इनपुट लेते हैं, तो आपके कोड पर कठोर प्रभाव पड़ सकता है, और अक्सर, यदि आप sस्टैक पर अगली सबसे ऊंची चीज के साथ ढेर के ऊपर स्वैप करने के लिए उपयोग कर रहे हैं, तो आप समस्या के बारे में सही तरीके से नहीं सोच रहे हैं। इनपुट्स को रीऑर्डर करने की कोशिश करें और देखें कि क्या आप समय से पहले इनपुट्स को स्वैप करके या कहीं और स्टैक को जोड़कर या इसे डुप्लिकेट करके स्वैप करने की आवश्यकता से छुटकारा पा सकते हैं। सबसे स्पष्ट I & O सबसे कम सफल 05AB1E उत्तर हो सकता है।


2

05AB1E ASCII- आर्ट गोल्फिंग

नीचे दिया गया कोड कस्टम आधार रूपांतरण का उपयोग करके ASCII-art को 05AB1E में बदलने में मदद करता है।

|»©ÐÙSDŠ¢øΣθ}R€н¬®sÅ?iD2£RDŠKsì}J©žLR‡®gö₅B®s"•ÿ•“ÿ“ÅвJ"

इसे ऑनलाइन आज़माएं।

इसके द्वारा पूरा किया जाता है:

  1. ASCII ड्राइंग में अद्वितीय वर्णों को सूचीबद्ध करना।
  2. उन्हें अवरोही क्रम में स्ट्रिंग में कितनी बार होता है (सबसे कम होने वाले पात्रों में सबसे अधिक)।
  3. यदि ASCII ड्रॉइंग सबसे अधिक होने वाले वर्ण (संपीड़ित पूर्णांक में 0 को रोकने के लिए) से शुरू होता है, तो पहले दो आइटम को उल्टा कर दें।
  4. 0-9A-Za-zउस क्रम में इनपुट के पात्रों को मैप करें , प्रत्येक विशिष्ट चरित्र का अपना मैपिंग-चरित्र हो रहा है, जब तक कि हर एक को बदल नहीं दिया जाता।
  5. आधार इसे संपीड़ित करता है, आपको बदलने के लिए आवश्यक उच्चतम आधार का उपयोग करके (अद्वितीय वर्णों की मात्रा के आधार पर)।
  6. बेस इसे फिर से बेस-255 (05AB1E कम्प्रेशन के लिए) में कन्वर्ट करता है।
  7. प्रारूप में सब कुछ प्रारूपित करें •<compressed_integer>•“<sorted_distinct_characters>“ÅвJ:।

आपको स्ट्रिंग-उद्धरण भी संपीड़ित करने की अनुमति देता है "; , Åвइस स्ट्रिंग का उपयोग कस्टम बेस के रूप में स्ट्रिंग का उपयोग करके उत्पन्न पूर्णांक को आधार-रूपांतरित करने के लिए करेगा; और Jइन सभी वर्णों को एक साथ एक ही तार में जोड़ देगा, जो कि आउटपुट है।

62 अद्वितीय वर्णों के साथ और ASCII- कला के लिए अच्छे पैटर्न को स्वीकार करता है।
अद्वितीय पात्रों की कम मात्रा, बेहतर संपीड़न।


XNOR डिजिटल टाइमिंग आरेख (214 बाइट्स, 9 अद्वितीय वर्ण) ड्रा के लिए उदाहरण आउटपुट :

    ┌─┐ ┌─┐ ┌─────┐ ┌─┐ ┌─┐ ┌───┐  
A ──┘ └─┘ └─┘     └─┘ └─┘ └─┘   └──
  ┌───┐ ┌───┐ ┌─┐ ┌─────┐   ┌─┐ ┌─┐
B ┘   └─┘   └─┘ └─┘     └───┘ └─┘ └
    ┌─────┐   ┌─┐   ┌─┐   ┌───┐   
X ──┘     └───┘ └───┘ └───┘   └────

होने वाला:

05AB1E , 106 बाइट्स

•I£.µ*:]ó±øqaµb₄ΘYQmœ¹µû₄p´ζÂĆ_5ŠKÑ×ðòË|₄#¹¶úôÂ-Í|¯ε¼É₂ïδ&é–9»ÞFò1î×HÃBjý2ĆÉ≠FYÂÂèC j‘£Å₅Œ•“─ └┘┐┌
XBA“ÅвJ

इसे ऑनलाइन आज़माएं।

(106/214) * 100 = 49.53% मूल ASCII- कला स्ट्रिंग का आकार।

जो कि 05AB1E (विरासत) में उस चुनौती के लिए मेरी वास्तविक सबमिशन के समान बाइट-काउंट है ।


कोड स्पष्टीकरण:

नोट: कोड बिल्कुल गोल्फ नहीं है। यह ASCII कला को सबसे कुशल संपीड़न में बदलने के लिए जल्दी से लिखा गया है, इसलिए यह काफी बदसूरत और लंबा है।

               # Take multi-line input
  ©              # Store it in the register to reuse later                         
ÐÙS              # Only leave unique characters (as list)
   DŠ¢ø          # Map it with the count for each of those characters
       Σθ}R      # Sort it based on that count (highest to lowest)
           €н    # Remove the count again, so the sorted characters remain
¬®sÅ?i           # If the input starts with the most occurring character:
      D2£RDŠKsì} #  Swap the first two characters in the list
J©               # Join everything together, and store it in the register to reuse later
  žLR           # Map each character to [0-9A-Za-z]
      ®gö        # Get the amount of unique characters, and convert it to that Base
         B      # And then convert that to Base-255
®s               # Push the string and swap so the compressed integer is at the top again
  "•ÿ•“ÿ“ÅвJ"    # Insert it in the correct output format
                 #  `•<compressed_integer>•“<sorted_distinct_characters>“ÅвJ`
"•ÿ•"            # (after which the result is output implicitly with trailing newline)

1
वैसे, जब से 05AB1E ने कोड पेज को बदला है, अधिकतम आधार 214 से 255 में बदल गया है ।
अदनान

1
शायद आपके जवाब में जोड़ने के लिए कुछ (या जनरेटर को संशोधित करें), लेकिन अगर ASCII कला में 10 से कम अलग-अलग वर्णों का उपयोग किया जा रहा है, तो आप इसे दो बाइट्स द्वारा गोल्फ कर सकते हैं। यानी आपका जनरेटर यह 22-बटर देता है , लेकिन इसके बजाय यह 20-बटर हो सकता है
केविन क्रूज़सेन

@KevinCruijssen विचार यह था कि मैं क्या संदेश देना चाह रहा था, वास्तव में यह दावा नहीं कर रहा था कि जनरेटर कुछ भी अच्छा है: पी। मुझे ईमानदारी से संदेह है कि यह अभी भी ओसाबी पर चलता है। मैंने लिखा है कि एक looong समय पहले!
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn यह निश्चित नहीं है कि यह एलिक्जिर रीराइट में चलता है, लेकिन यह निश्चित रूप से अभी भी विरासत संस्करण में काम करता है। मैंने पहले ही बेस -214 को बेस -255 में संपादित कर दिया है, जैसा कि अदनान की टिप्पणी में ऊपर बताया गया है। इसके अलावा यह बहुत अच्छा काम करता है और मैंने इसे कुछ बार इस्तेमाल किया है (हालाँकि इसे हर बार आगे बढ़ाया जाता है;))। स्ट्रिंग और संख्या दोनों की पीढ़ी महान काम करती है!
केविन क्रूज़सेन

यहाँ एक बेहतर संस्करण है। (बहुत बदसूरत और तेजी से लिखा गया है, लेकिन यह काम करता है)। यह 113 के बजाय आपके उदाहरण को 108 बाइट्स बना देगा । मैंने जो सुधार किए हैं: उच्चतम घटना पर अलग-अलग वर्णों को क्रमबद्ध करें। पूर्णांक जितना संभव हो उतना छोटा है; <str><compr_int><int>вèJअपने के बजाय का उपयोग कर <compr_int><int>BžLR<str>‡; और स्ट्रिंग-कोट्स के बजाय उपयोग करना ", इसलिए "इनपुट का हिस्सा हो सकता है।
केविन क्रूज़सेन

1

स्ट्रिंग्स और इन्टस समान प्रकार के होते हैं

ऐसा कुछ नहीं, जिससे हर कोई सहमत हो, लेकिन यह काम करता है।

निम्नलिखित दो कार्यक्रमों पर विचार करें:

4 5+
"4""5"+

वे दोनों 9 में परिणाम । ऐसा इसलिए है क्योंकि हर मूल्य का पहले मूल्यांकन (के साथ) किया जाता हैast.literal_eval ) किया जाता है। उसके कारण, हम सभी स्ट्रिंग हेरफेर ऑपरेटरों को इन्ट्स पर और सभी इंट हेरफेर ऑपरेटरों को स्ट्रिंग्स पर कर सकते हैं।

उदाहरण के लिए, 12345ûसंख्या में तालमेल होता है 12345, जिसके परिणामस्वरूप 123454321। उसके बाद, हम इस नंबर पर नियमित गणित कर सकते हैं।

12345û50000-

यह परिणाम होगा: 123404321


0

छिपे हुए छोरों और पुनरावृत्तियों

05AB1E में निम्नलिखित सामान्य लूप और पुनरावृत्त हैं:

  • F, जो 0 .. n-1 के माध्यम से पुनरावृत्त करता है
  • G, जो 1 .. n-1 के माध्यम से पुनरावृत्त करता है
  • ƒ, जो 0 .. n के माध्यम से पुनरावृत्त करता है ।
  • v, जो प्रत्येक तत्व पर निर्भर करता है [0], s [1], .., s [n]
  • ʒ, जो वास्तव में लूप नहीं है, लेकिन एक फिल्टर-बाय कमांड है। हम इस आदेश का दुरुपयोग करते हैं क्योंकि यह प्रत्येक तत्व के माध्यम से लूपिंग का अनपेक्षित व्यवहार है।

इन छोरों का उपयोग करते हुए, हम निम्नलिखित छिपे हुए छोरों को प्राप्त कर सकते हैं :

  • इसके बजाय gF, आप उपयोग कर सकते हैं vजिसमें ए भी हैN -इंडेक्स किया जा सकता है।
  • vy -> ʒप्रतिस्थापन में थोड़ा और अधिक मुश्किल है:
    • आपको तुरंत परिणाम प्रिंट करने की आवश्यकता है। यह स्टैक के शीर्ष को प्रिंट करने से स्वचालित रूप से प्रिंट करता है।
    • कोड स्निपेट एक नए अस्थायी स्टैक पर चलाया जाता है । इसका अर्थ है कि स्टैक-निर्भर स्निपेट का उपयोग नहीं किया जा सकता है।
    • yइस तरह के लूप में इनवाइट करना संभव नहीं है।

मैं इस एक साल पहले नियुक्त किया गया है पता है, लेकिन नहीं कर रहे हैं [, µऔर εभी सामान्य छोरों / पुनरावृत्तियों का हिस्सा है?
केविन क्रूज़सेन

इसके अलावा, yइनमें से कुछ के साथ अब संभव है।
मैजिक ऑक्टोपस Urn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.