नोट: ये सभी तकनीकें वर्णमाला स्ट्रिंग को वेरिएबल में असाइन करती हैं a
।
मैं 99% निश्चित हूं कि जावास्क्रिप्ट में इसे प्राप्त करने का सबसे छोटा तरीका वास्तव में है:
a="abcdefghijklmnopqrstuvwxyz" // 30 bytes
लेकिन कई अन्य दिलचस्प तरीके हैं। आप स्ट्रिंग संपीड़न का उपयोग कर सकते हैं:
a=btoa`i·?yø!?9%?z)ª»-ºü1`+'yz' // 31 bytes; each ? represents an unprintable
आप संकुचित स्ट्रिंग प्राप्त कर सकते हैं atob`abcdefghijklmnopqrstuvwx`
। 'yz'
मैन्युअल रूप से जोड़ा जाना चाहिए क्योंकि अगर आप पूरी स्ट्रिंग सेक, जबकि परिणाम केवल 27 बाइट्स है, यह के रूप में बाहर हो जाएगा abcdefghijklmnopqrstuvwxyw==
।
मेरा मानना है कि प्रोग्राम करने का सबसे छोटा तरीका वह तरीका भी है जो आपने सुझाया है:
for(i=97,a='';i<123;)a+=String.fromCharCode(i++) // 48 bytes
यदि आप चाहें तो आप इसे ES6 सुविधाओं ( टेम्पलेट स्ट्रिंग्स``
, प्रसार ऑपरेटर...
) के साथ कर सकते हैं:
a=[...Array(26)].map(_=>String.fromCharCode(i++),i=97).join`` // 61 bytes
a=[...Array(26)].map((_,i)=>String.fromCharCode(i+97)).join`` // also 61 bytes
a=[...Array(i=26)].map(_=>String.fromCharCode(++i+70)).join`` // again, 61 bytes
आप इसके बजाय एक चर के साथ एक बेहतर कर सकते हैं .join``
:
[...Array(26)].map(_=>a+=String.fromCharCode(i++),i=97,a='') // all 60 bytes
[...Array(26)].map((_,i)=>a+=String.fromCharCode(i+97),a='')
[...Array(i=26)].map(_=>a+=String.fromCharCode(++i+70),a='')
या सरणी समझ के साथ ES7 , जो एक और बाइट छोटी है:
a=[for(_ of Array(i=26))String.fromCharCode(++i+70)].join`` // 59 bytes
पहले से ही चर बनाने से एक और बाइट बचती है:
a='',[for(_ of Array(i=26))a+=String.fromCharCode(++i+70)] // 58 bytes
इसके अलावा, String.fromCharCode
कई तर्कों को स्वीकार करता है और स्वचालित रूप से उनके साथ जुड़ जाएगा। इसलिए हम प्रत्येक ईएस 6 संस्करण को 57 बाइट्स तक नीचे कर सकते हैं:
a=String.fromCharCode(...[...Array(26)].map(_=>i++,i=97)) // all 57 bytes
a=String.fromCharCode(...[...Array(26)].map((_,i)=>i+97))
a=String.fromCharCode(...[...Array(i=26)].map(_=>++i+70))
और ES7 55 से नीचे एक:
a=String.fromCharCode(...[for(_ of Array(i=26))++i+70]) // 55 bytes
यदि आप गोल्फिंग रेंज के बारे में अधिक जानना चाहते हैं, तो सुझावों के इस सेट को देखें । ES7 की सरणी समझ के बारे में भी एक है ।
संपादित करें: जैसा कि edc65 ने इंगित किया है, इनमें से अधिकांश i.toString(36)
इसके बजाय का उपयोग करके छोटे हो जाते हैं String.fromCharCode(i)
:
for(i=9,a='';++i<36;)a+=i.toString(36) // 38 bytes
a=[...Array(26)].map(_=>(++i).toString(36),i=9).join`` // 54 bytes
[...Array(26)].map(_=>a+=(++i).toString(36),i=9,a='') // 53 bytes
i=9,a=[for(_ of Array(26))(++i).toString(36)].join`` // 52 bytes
i=9,a='',[for(_ of Array(26))a+=(++i).toString(36)] // 51 bytes
मेरा मानना है कि यह सबसे कम संभव है जिसे फ़ंक्शन रिटर्न मान कहा जा सकता है:
eval("for(i=9,a='';++i<36;)a+=i.toString(36)") // 46 bytes
यह तीन बाइट्स है जो मैन्युअल रूप से इसे एक फंक्शन से लौटाने से कम है:
x=>eval("for(i=9,a='';++i<36;)a+=i.toString(36)") // 49 bytes
x=>{for(i=9,a='';++i<36;)a+=i.toString(36);return a} // 52 bytes
बेशक, x=>"abcdefghijklmnopqrstuvwxyz"
अभी भी सब कुछ धड़कता है।