डी 2 में गोल्फ के लिए टिप्स


10

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

जवाबों:


1

देखो, कोई परगना नहीं!

डी के कार्यों और टेम्पलेट कार्यों को मूल्यों, विधियों (मदद नहीं करेगा), और गुणों के रूप में कहा जा सकता है।

मैं विश्वास नहीं कर सकता कि किसी ने भी अभी तक यह नहीं कहा है। मैं उन लोगों की सूची दूंगा जो बाइट्स बचाते हैं:

  • fun()और (यह मानते हुए कि कोई चर नहीं है ) fun!()()छोटा करें ।funfun
  • fun(par)से छोटा है par.fun(यह मानते हुए कि parउसके पास कोई संपत्ति / विधि नहीं है fun, साथ ही साथ parएक अभिव्यक्ति नहीं है 5+2)।
  • fun!(T)() के लिए छोटा है fun!T
  • fun!(T)(par)छोटा होता है par.fun!T(यह मानते हुए parकि कोई संपत्ति / विधि नहीं है fun)

और वस्तुओं के साथ:

  • new cls()करने के लिए shortens new cls(अधिक जावास्क्रिप्ट किसी को?)
  • obj.fun()और obj.fun!()()छोटा कर दियाobj.fun
  • obj.fun!(T)() के लिए छोटा है obj.fun!T

एक अंतिम बात, पुराने संस्करणों का उपयोग करें । यह आपको अपने कोड को छोटा करने वाली अस्वीकृत सुविधाओं का उपयोग करने की अनुमति देता है। उस ने कहा, सबसे अच्छी सलाह: डी कोड-गोल्फ के लिए अच्छा नहीं है। यह एक महान भाषा है, सिर्फ कोड-गोल्फ के लिए नहीं।


अब के लिए स्वीकार करना :)
बिल्ली 16

हाँ, यह जानकर अच्छा लगा कि यहाँ अभी भी D के प्रशंसक हैं।
जकार्इ

1

D जावास्क्रिप्ट है।


बेशक नहीं। लेकिन, जब से निपटने के लिए float, doubleऔर real, nanएक मूल्य है जिसे संभाला जाना चाहिए, और, जैसा कि IEEE 754 द्वारा निर्दिष्ट किया गया है, NaN खुद के साथ तुलना नहीं करता है।

writeln(double.nan == double.nan); // false

मतलब,

writeln(value!=value); // only true for nan

की तुलना में कम रास्ता है

import std.math;
writeln(isNaN(value));

जाहिर है, हमेशा वास्तविक कोड के math.isNaNलिए उपयोग करें । ;)


0

डी में टाइप इंट्रेंस और एक autoकीवर्ड है। यदि वस्तु नहीं है int, तो autoसंभवतः कम है।


सिंटैक्स के autoसाथ एक साहचर्य सरणी का निर्माण करते समय काम करता है KeyType[ValueType]?
एलेक्स ए।

@AlexA। auto asd = ["a":1, "b": 2];काम करता है, लेकिन जब KeyType[ValueType]से autoकीवर्ड के स्थान पर जाना होगा , मुझे नहीं पता कि क्या वह हमेशा उन प्रकारों के साथ काम करेगा जिनके लिए शाब्दिक निर्माण नहीं किया जा सकता है
बिल्ली

@AlexA। auto arr = ["a": true, "b": 6];काम करता है, चाबियाँ और मूल्य संगत प्रकार के होने चाहिए
बिल्ली

0

D, विधि-निर्धारण में महान है, लेकिन:

str.toLower.strip().split("").sort();

के समान है

sort(split(strip(str.toLower),""));

और आमतौर पर गैर श्रृंखलित एक कम है, जो मैं सिर्फ महसूस किया, मुझे मेरे सवाल का जवाब छोटा करने के लिए देता है तो कचरा पेटी की व्यवस्था करें : डी


यह उन डॉट्स है
कैलक्यूलेटर

0

जैसे C / C ++, mainहो सकता है intया हो सकता है void, लेकिन void main(){}हमेशा की तुलना में छोटा होगा int main(){return my_func_returning_int;}


यदि प्रश्न आउटपुट के लिए कहें तो पूर्णांक int main(){return output}छोटा नहीं होगा?
andlrc

@ देव-शून्य यदि सवाल पूर्णांक लिखने के लिए एक पूर्णांक लिखने के लिए कहता है तो import std.stdio;void main(){write(7);}जरूरत है। मुझे संदेह है कि एक सवाल एक कार्यक्रम को वापस करने के लिए बाध्य करेगा क्योंकि कई भाषाएँ रिटर्न कोड सेट नहीं कर सकती हैं
बिल्ली

@ देव-नल हालांकि, हां, उस मामले में कि इसे stdout को नहीं लिखा जाना चाहिए , लेकिन वापस लौटा, यह छोटा होगा
बिल्ली

2
आमतौर पर आपको अपनी भाषा के लिए सबसे सुविधाजनक तरीके से लौटने / आउटपुट करने की अनुमति होती है। लेकिन मुझे लगता है कि D केवल 0-255 से बाहर निकलने के कोड का समर्थन करता है?
andlrc

@ देव-नल वास्तव में, POSIX केवल 255 तक के एक्जिट कोड का समर्थन करता है। मुझे विंडोज के बारे में पता नहीं है, लेकिन यूनिक्स / लिनक्स पर ओवर फ्लो के कारण 255 से अधिक रैप्स के बाहर निकलने का कोड है।
बिल्ली

0

D, एक मल्टीपरडीग्म (ऑब्जेक्ट फंक्शनल) सिस्टम प्रोग्रामिंग भाषा के रूप में, TIMTOWTDI को गले लगाने के लिए लगता है, या इसे करने के लिए एक से अधिक तरीके हैं।

बिंदु में मामला, कार्यक्रम के argv लिखना:

import std.stdio, std.array, std.algorithm;

void main(string[] args) {
    for(int i=0;i<args.length;writeln(args[i++])){};

    foreach(a;args)writeln(a);

    each!writeln(args);
}

सी-स्टाइल के लिए ध्यान दें कि लूप को {}खाली ब्लॉक के रूप में आवश्यक है और इस मामले में एक अर्धविराम या एक खाली बयान के रूप में कुछ भी स्वीकार नहीं करेगा । आमतौर पर, या ;नो-ऑप होते हैं।


क्या आप बाइट को बचाने char*के stringलिए इस्तेमाल कर सकते हैं ?
एलेक्स ए।

@AlexA। function D main parameters must be main() or main(string[] args)इसके अलावा, charवस्तुतः एक चरित्र है, शाब्दिक रूप से एक वर्ण char*का सूचक है और char[]वर्ण शाब्दिकों की एक सरणी है (तार अलग हैं)। डी! = सी || सी ++
बिल्ली

1
ओआईसी। कभी डी का इस्तेमाल नहीं किया, सिर्फ अनुमान लगाया।
एलेक्स ए।

0

D में कुछ प्रकार के C # -स्टाइल लैम्ब्डा एक्सप्रेशन हैं, जिन्हें असाइन किया जा सकता है और अकेले खड़े हो सकते हैं:

(int a,int b)=>a*b;

auto a=(int a,int b)=>a*b;

हालाँकि, C # के विपरीत, हस्ताक्षर के प्रकार अभी भी आवश्यक हैं क्योंकि D में Haskell-level प्रकार का अनुमान नहीं है।

https://dlang.org/spec/expression.html#Lambda


प्रकार गोल्फिंग के लिए समारोह टेम्पलेट्स? टी के रूप में intT f(T)(T a,T b){return a + b}f(5);
fede s

@fedes। हैलो दोस्त! हां, आप बिलकुल सही हैं (लेकिन मुझे लगता है / आशा है कि "अनकैप्ड" लैम्ब्डा टाइप किए गए फंक्शन एक्सप्रेशन से छोटा होगा)।
बिल्ली

आह, टो! जब मैं डी पर एक और नज़र डालने का फैसला करता हूं, तो मुझे कौन लगता है? : DI स्पष्ट रूप से घोषित करता है कि आपको भाषाओं पर अच्छा स्वाद है
फेडेड एस।

@fedes। अजी, क्यों धन्यवाद! : P का तात्पर्य है कि आप भी ऐसा करते हैं (लेकिन मैंने स्मालटाक के सामने पर्याप्त समय नहीं बिताया है, फिर भी वैसे भी :))
बिल्ली

0

किसी अन्य तर्क के साथ किसी ऑब्जेक्ट पर फ़ंक्शन कॉल करना

reverse(x);

लगभग हमेशा के लिए छोटा किया जा सकता है

x.reverse;

एक बाइट या अधिक दाढ़ी बनाने के लिए।

ऐसा इसलिए है क्योंकि .एलएचएस को एक अंतर्निहित पहला तर्क बनाता है, और टेम्प्लेटिंग हमें आर्ग्स के लिए सही फ़ंक्शन चुनने देता है।


डॉट्स अच्छे हैं? यह भ्रामक है ...
कैलक्यूलेटरफिलीन

@CatsAreFluffy जब कोई आर्गन्स नहीं हैं। एक और तर्क होता है, x.reverse(y, z)लंबे समय तक डॉट की वजह से है
बिल्ली

1
x.reverse(y,z)और reverse(x,y,z)एक ही बाइट गिनती है।
21

@ZacharyT उह, हाँ ...
बिल्ली

आप की तुलना कर रहे थे x.reverse(y, z)करने के लिए x.reverse?
Zacharý

0

यदि प्रश्न को पूर्ण कार्यक्रम की आवश्यकता है, तो moduleघोषणा आश्चर्यजनक रूप से अनावश्यक है।

* खांसी * जावा, कोई भी? * गले को साफ करता है * वास्तव में , डी का moduleसिस्टम जावा की तुलना में पुराना है।

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