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


19

ब्रेकीलॉग एक ऐसी भाषा है जो हाल ही में कोड-गोल्फिंग में प्रमुखता से उठने लगी है (और बस एक प्रमुख अद्यतन प्राप्त किया है)। प्रोलॉग की तरह, इसका यह फायदा है कि यह अक्सर एक समस्या को हल कर सकता है (आमतौर पर जानवर बल के माध्यम से) केवल एक पर्याप्त सटीक विवरण से कि समस्या क्या दिखती है, एक विशेषता जिसका अर्थ है कि सही प्रकार की चुनौती पर, यह अक्सर तुलनीय होता है शीर्ष गोल्फ भाषाएँ (और समय-समय पर जेली को हरा करने के लिए जाना जाता है)।

आपके पास गोल्फिंग के लिए क्या सुझाव हैं (यानी कम से कम संभव प्रोग्राम लिखना) Brachylog? यह ज्यादातर ऐसी सलाह की तलाश में है, जो विशेष रूप से ब्रैंकलॉग के लिए विशिष्ट हो, न कि सलाह के लिए जो कई भाषाओं में लागू हो। (सामान्य रूप से घोषणात्मक भाषाओं में गोल्फिंग के बारे में सुझाव संभवतः यहां उपयुक्त हो सकते हैं, यह इस बात पर निर्भर करता है कि उनके पास ब्रिग्लॉग के अलावा अन्य भाषाओं के लिए कितना आवेदन होगा, हालांकि प्रोलॉग में गोल्फिंग के लिए टिप्स भी देखें ।)

जवाबों:


4

एक्सप्लॉइट नेस्टेड नए चर बनाने के लिए भविष्यवाणी करता है

Brachylog के पास अपने दो विशेष चर, ?(इनपुट / बाएं पैरामीटर) और .(आउटपुट / सही पैरामीटर) बनाने के लिए बहुत सारे विशेष वाक्यविन्यास मामले हैं , जिनका उपयोग करने के लिए terser। इसका मतलब है कि आप अपने विधेय के उपयोग करने की जरूरत नहीं है, तो ?और .उपयोग करने के लिए चर, लेकिन जरूरत, आप कर सकते हैं अक्सर एक नेस्टेड विधेय उपयोग करने के लिए बनाने के माध्यम से बाइट्स बचाने अपनी ? और .

एक सरल उदाहरण के रूप में, एक प्रोग्राम पर विचार करें जो इस तरह दिखता है:

… A … ∧A … B … B …

यह एक लंबे कार्यक्रम के लिए एक बहुत ही सामान्य आकार है; आखिरकार, बहुत सारे अंतराल हैं जिनमें कुछ भी हो सकता है। मान लीजिए कि हमें केंद्र के तीन अंतरालों की कोई आवश्यकता नहीं है ?या .अंदर नहीं है । फिर हम इसे इस तरह से फिर से लिख सकते हैं:

… { … & … . … } …

यहाँ, नेस्टेड प्रेडिकेट की ?भूमिका निभा रहा है A, और इसकी. भूमिका निभा रहा है B। हम देख सकते हैं कि यह मूल कोड की तुलना में एक बाइट है; बदल रहा है AABBकरने के लिए {?.}बाइट्स के मामले में कोई बदलाव नहीं आया है, लेकिन यह हमें सरल करने के लिए अनुमति दी ∧?संक्षिप्त नाम करने के लिए &

संबंधित ट्रिक को बदलना है

∧. … ?∧

सेवा

~{ … }

(जो एक बाइट छोटा है), हालांकि ध्यान दें कि इसके बजाय तर्कों का आदान-प्रदान करने के लिए कॉलर को प्राप्त करना लगभग हमेशा सस्ता होता है (जब तक कि कार्यक्रम में कम से कम तीन अलग-अलग स्थानों से विधेय नहीं कहा जाता है, जो कि ब्रेकीलॉग में दुर्लभ है)।


3

विभाजित लंबाई -2 मेटाप्रेडिकेट्स के अंदर की भविष्यवाणी करती है

यह सबसे अच्छा उदाहरण द्वारा समझाया गया है। किसी सूची के पहले और अंतिम तत्वों को निकालने के लिए, हम उसे काटते हैं और चाकू मारते हैं:

bk

यदि हम किसी सूची के प्रत्येक तत्व पर इस ऑपरेशन को करना चाहते हैं, तो हम एक मैप ऑपरेशन का उपयोग कर सकते हैं:

{bk}ᵐ

हालाँकि, यह विधेय को दो में विभाजित करने के लिए छोटा है, और प्रत्येक भाग को अलग से मैप करें:

bᵐkᵐ

एक ही चाल का उपयोग कुछ रूपक के साथ किया जा सकता है:

{bk}ᵐ  →  bᵐkᵐ
{bk}ˢ  →  bˢkˢ
{bk}ᶠ  →  bᶠkˢ
~{bk}  →  ~k~b

ध्यान दें कि कुछ उपमाओं के लिए, जैसे , इसे दो भागों में विभाजित करने का कोई सामान्य उद्देश्य नहीं है, लेकिन फिर भी यह संभव नहीं है कि आपके द्वारा काम कर रहे विशिष्ट कार्य के लिए काम करने वाला अपघटन संभव हो।


3

खाली स्ट्रिंग को खाली सूची में डालना

कभी-कभी, स्ट्रिंग्स के साथ काम करते समय, हम जिस एल्गोरिथ्म का उपयोग करते हैं, वह खाली सूची के साथ जो हम चाहते हैं, उसे एकीकृत कर सकते हैं [], जब हम खाली स्ट्रिंग चाहते हैं ""

हम खाली सूची का उपयोग करके खाली स्ट्रिंग में डाल सकते हैं ,Ẹ, जो खाली स्ट्रिंग को इसके बाएं चर में जोड़ देता है (यह जिस तरह ,से लागू किया गया है उसका एक फायदा है)।

इसका यह भी लाभ है कि यह कुछ भी नहीं करता है अगर बाएं चर एक स्ट्रिंग है। इसलिए, यदि आपका प्रोग्राम है

{  
   some predicate that should always output a string, 
   but actually outputs [] instead of "" in specific cases
}

फिर

{
  some predicate that should always output a string, 
  but actually outputs [] instead of "" in specific cases
},Ẹ

अपनी इच्छानुसार काम करेगा।


2

एकल-तत्व सूची में चलता है

इस स्निपेट पर विचार करें:

ḅ∋≠

यदि इनपुट एक सूची या स्ट्रिंग है, तो आउटपुट 1 की सबलिस्ट / सबस्ट्रिंग के साथ एकीकृत होता है, जो समान तत्वों के लंबे समय तक चलने का हिस्सा नहीं है। यह सूची को समान तत्वों के ब्लॉक में विभाजित करता है और एक ऐसा ब्लॉक खोजता है जिसके तत्व सभी अलग-अलग हैं। तत्वों को सिंगलटन सूचियों के बजाय स्वयं प्राप्त hकरने के लिए, अंत तक निपटें । मैं इस संरचना में इस्तेमाल किया यहाँ के साथ oएक चरित्र है कि केवल इनपुट स्ट्रिंग में एक बार होता है खोजने के लिए।

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