Clojure का उपयोग करके कोड गोल्फिंग के लिए आपके सुझाव क्या हैं?
इस सवाल का उद्देश्य क्लोजर के लिए विशिष्ट तकनीकों की एक सूची एकत्र करना है और सामान्य कोड-गोल्फ समस्याओं में इसका उपयोग किया जा सकता है।
Clojure का उपयोग करके कोड गोल्फिंग के लिए आपके सुझाव क्या हैं?
इस सवाल का उद्देश्य क्लोजर के लिए विशिष्ट तकनीकों की एक सूची एकत्र करना है और सामान्य कोड-गोल्फ समस्याओं में इसका उपयोग किया जा सकता है।
जवाबों:
लैम्ब्डा के लिए रीडर सिंटैक्स का उपयोग करें।
इसलिए उपयोग करें
#(+ % %2 %3)
के बजाय
(fn [x y z] (+ x y z))
आप व्हॉट्सएप को कुछ समय के लिए खत्म कर सकते हैं:
#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)
#(+ % %2 %3)
के बराबर है +
।
एक स्ट्रिंग और कुछ के बीच:
(println(+"Hello, World!"1))
कोष्ठक और कुछ के बीच:
(for[x(range 5)](* x x))
बिल्डरों या वैरिएबल नामों के अलावा एक संख्या और सब कुछ के बीच:
Allowed:
(+ 1"Example")
(map{1"-1"2"-2"}[1 2 3])
Not allowed:
(+1 2)
के बीच @
(परमाणुओं के लिए dereference) और कोष्ठक।
@
let
और कुछ स्थानों से छुटकारा पाने में सक्षम हो सकते हैं ।
#(+ 1(first%))
=#(+ 1 (first %))
स्ट्रिंग्स को वर्णों के अनुक्रम के रूप में माना जा सकता है
वर्णों को वर्णानुक्रम में क्रमबद्ध करने के लिए:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0
बजाय का उपयोग करेंfirst
संग्रह का पहला तत्व प्राप्त करने के लिए, बाइट का उपयोग करने (nth ... 0)
से first
बचत होती है:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second
(2 बाइट्स) के लिए चला जाता है
([2 3 4]1)
तत्व को सूचकांक 1 में लौटाता है। उदाहरण के लिए इनपुट प्रारूप लचीला होने पर यह लाभकारी होना चाहिए।
उदाहरण के लिए आप उपयोग करने की आवश्यकता है partition
या frequencies
कई बार, यह उन्हें एक में एक सिंगल-बाइट प्रतीक करने के लिए बाध्य करने के लिए फायदेमंद साबित हो सकता let
मैक्रो। तब फिर से यह इसके लायक नहीं हो सकता है यदि आपको let
अन्यथा की आवश्यकता नहीं है, और फ़ंक्शन का नाम अपेक्षाकृत कम है।