हेक्स में गोल्फ के लिए युक्तियाँ


12

हेक्स में गोल्फ के लिए आपके पास क्या सामान्य सुझाव हैं ? मैं उन विचारों की तलाश कर रहा हूं, जिन्हें कोड-गोल्फ समस्याओं पर लागू किया जा सकता है और जो कम से कम कुछ हद तक विशिष्ट हैं (जैसे "टिप्पणियों को हटा दें" कोई जवाब नहीं है)।

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

Haxe यहाँ ऑनलाइन चलाया जा सकता है !


मैंने अतीत में हैक्स का काफी इस्तेमाल किया है, लेकिन जब से मैंने गोल्फ खेलना शुरू किया है मैंने इसका ज्यादा इस्तेमाल नहीं किया है। मुझे इसे गोल्फ के लिए इस्तेमाल करने की कोशिश करनी होगी ...
ETHproductions

@ETHproductions यहाँ भी। आज, मैंने इसके साथ दो बार गोल्फ किया, और यह मजेदार था। इसकी सूची समझ और पुनरावृत्तियों के साथ इसकी कुछ अच्छी गोल्फिंग क्षमताएं हैं, इसलिए मैंने यह प्रश्न खोलने का निर्णय लिया कि क्या किसी के पास साझा करने के लिए सुझाव हैं।
यति

जवाबों:


8

स्ट्रिंग इंटरपोलेशन

हेक्स एकल-भाव स्ट्रिंग्स पर स्ट्रिंग इंटरपोलेशन का समर्थन करता है । जावास्क्रिप्ट ES6 में टेम्पलेट स्ट्रिंग की तरह, आप एक स्ट्रिंग में एक अभिव्यक्ति को शामिल कर सकते हैं ${...}:

trace('2 + 2 = ${2 + 2}');

ES6 के विपरीत, हालाँकि, आप घुंघराले ब्रैकेट को छोड़ सकते हैं जब अभिव्यक्ति एक एकल चर होती है:

var x = 2 + 2;
trace('2 + 2 = $x');

ये दोनों उदाहरण छपते हैं 2 + 2 = 4


7

ऐरे की समझ

Haxe सरणी समझ का समर्थन करता है:

trace([for (i in 0...5) i]); // Prints 0,1,2,3,4

कई अन्य भाषाओं के विपरीत, आप whileसमझ में भी उपयोग कर सकते हैं :

var i = 5;
trace([while (i > 0) i--]); // Prints 5,4,3,2,1

यह बहुत उपयोगी हो सकता है जब आपको नहीं पता कि आपको एक सरणी की कितनी देर तक आवश्यकता है।

आप भी कर सकते हैं श्रृंखला for, whileऔर ifबयान:

trace([for (x in ['A','B','C','D'])
       for (y in ['x','y'])
       if (x + y != "Cx")
       x + y
]); // Prints Ax,Ay,Bx,By,Cy,Dx,Dy

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

@TuukkaX Haha, जो कभी-कभी होता है :) मैं यहाँ आपके एक उदाहरण को शामिल करूँगा, अगर आपको कोई आपत्ति नहीं है। इसके अलावा, try.haxe.org वर्ग कोष्ठक मुद्रित करने के लिए प्रतीत नहीं होता है ...
ETHproductions

कार्टेशियन उत्पाद की गणना करने वाला एक नीट है। मुझे लगता है कि यह आपके पोस्ट के लिए एक अच्छा अतिरिक्त होगा :)
यती

6

रेंज ऑपरेटर

हैक्स में एक रेंज ऑपरेटर है ...जिसका उपयोग पूर्णांकों की श्रेणी बनाने के लिए किया जा सकता है। उदाहरण के लिए, इसके बजाय:

var i = 0;
while (i < 10) trace(i++);

तुम यह केर सकते हो:

for (i in 0...10) trace(i++);

के लिए विशेषण x...y:

  • xऔर yदोनों ही इन्टस होने चाहिए।
  • xसे बड़ा नहीं हो सकता y
  • यह एक IntIterator ऑब्जेक्ट देता है , जिसका उपयोग किसी भी Iterable के समान स्थानों में किया जा सकता है।

1

सशर्त रूप से एक बयान चल रहा है

जाहिर है आप सशर्त रूप से कुछ भी चला सकते हैं if:

if(n>5)doSomething(n);

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

n>5?doSomething(n):0;

आप कभी-कभी उपयोग करके किसी अन्य बाइट को बचा सकते हैं &&, हालांकि यह बहुत दुर्लभ है क्योंकि &&केवल तभी काम करता है जब दोनों अभिव्यक्तियाँ बूलियन्स लौटें:

n>5&&doSomething(n);

यह करने के लिए एक प्रमुख अपवाद नहीं है कीवर्ड : अगर Haxe एक में चलाता है return, breakया continue कहीं भी , इसे तुरंत इसे चलाने और छोड़ जो भी अभिव्यक्ति इस पर काम कर रहा था होगा। इसका मतलब है कि इसके बजाय:

if(n>5)return n;

आप 2 बाइट्स को बचाने के लिए ऐसा कर सकते हैं:

n>5&&return n;

1

अभिव्यक्ति में कीवर्ड का उपयोग करें

हेक्स की एक और असामान्य विशेषता यह है कि सब कुछ एक अभिव्यक्ति है । उदाहरण के लिए, यह कोड पूरी तरह से मान्य है:

function(n){while(n>0)n%4==1?return 6:n--;return 3;}

ठीक है, यह एक काफी बेकार उदाहरण है, लेकिन उम्मीद है कि आपको मेरी बात मिल जाएगी। यह अधिकांश खोजशब्दों के साथ काम करता है:

function(n){while(n>0)n%4==1?break:n--;return n;}

यह आपको if/ elseइनलाइन का उपयोग करने की अनुमति देता है , जैसेp=if(n>1)7else 4; , हालांकि p=n>1?7:4;कम है।

वे कीवर्ड जो आप इनलाइन का उपयोग नहीं कर सकते हैं

  • var - कंपाइलर शून्य को मान के रूप में उपयोग करने की कोशिश के बारे में शिकायत करेगा।
  • for/ while- समान रूप से ऊपर, हालांकि आप उन्हें सरणी समझ में उपयोग कर सकते हैं ।

1

Omit फ़ंक्शन कोष्ठक

अधिकांश भाषाओं के विपरीत, हेक्स में सब कुछ एक अभिव्यक्ति है , जिसमें शामिल है {blocks}। इस प्रकार, एक हेक्स कार्यक्रम ( अभिव्यक्ति के अपवाद के साथ ) में कहीं भी घुंघराले कोष्ठक को switchछोड़ दिया जा सकता है, यदि उनमें केवल एक ही कथन हो। इसलिए इसके बजाय:

function f(n){return Math.pow(3,n);}

तुम यह केर सकते हो:

function f(n)return Math.pow(3,n);

कई कार्यों पर एक आसान दो बाइट्स बचाए गए।

भले ही किसी फ़ंक्शन में कई कथन हों, आप अक्सर बाइट को ब्लॉक के बाहर ले जाकर बचा सकते हैं return :

function f(a){var b=a*a;return a<0?-b:b;}
function f(a)return{var b=a*a;a<0?-b:b;}

यह काम करता है क्योंकि एक ब्लॉक ब्लॉक के अंदर अंतिम अभिव्यक्ति का मूल्यांकन करता है।


संपादित करें: यदि आपको किसी संख्या की घन की आवश्यकता है, तो इसका उपयोग करना बेहतर है n*n*n, या n*n*n*nकिसी संख्या के टेसेरैक्ट के लिए समकक्ष रूप से , आदि ... हालांकि, Math.powयहां एक अच्छा उदाहरण के रूप में कार्य करता है।
यति

@TuukkaX हेह, धन्यवाद। मैं इसके Math.pow(3,n)बजाय उपयोग करूँगा ;-)
ETHproductions
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.