Not: Bu tekniklerin tümü, değişkene alfabe dizesini atar a
.
% 99 eminim ki bunu JavaScript'te başarmanın en kısa yolunun gerçekten:
a="abcdefghijklmnopqrstuvwxyz" // 30 bytes
Ancak başka ilginç yöntemler de var. Dize sıkıştırmasını kullanabilirsiniz:
a=btoa`i·?yø!?9%?z)ª»-ºü1`+'yz' // 31 bytes; each ? represents an unprintable
Sıkıştırılmış dize alabilirsiniz atob`abcdefghijklmnopqrstuvwx`
. 'yz'
Sonuç sadece 27 byte durumdayken, tüm dizeyi sıkıştırmak eğer, bunun nedeni olarak öne dönecek elle eklenmesi gerekir abcdefghijklmnopqrstuvwxyw==
.
Programlı olarak yapmanın en kısa yolunun da önerdiğiniz yöntem olduğuna inanıyorum:
for(i=97,a='';i<123;)a+=String.fromCharCode(i++) // 48 bytes
İsterseniz bunu ES6 özellikleriyle ( şablon dizeleri``
, yayma operatörü...
) yapabilirsiniz:
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
Bir değişken yerine bunun yerine daha iyisini yapabilirsiniz .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='')
Veya başka bir bayt kısa olan dizi kavramalara sahip ES7 :
a=[for(_ of Array(i=26))String.fromCharCode(++i+70)].join`` // 59 bytes
Değişkeni önceden oluşturmak, başka bir bayttan tasarruf sağlar:
a='',[for(_ of Array(i=26))a+=String.fromCharCode(++i+70)] // 58 bytes
Ayrıca, String.fromCharCode
birden fazla argüman kabul eder ve otomatik olarak onlara katılır. Böylece her ES6 sürümünü 57 byte'a indirebiliriz:
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))
Ve ES7’den 55’e:
a=String.fromCharCode(...[for(_ of Array(i=26))++i+70]) // 55 bytes
Golf sahaları hakkında daha fazla bilgi edinmek istiyorsanız, bu ipuçlarını inceleyin . ES7'nin dizi anlamalarıyla ilgili bir tane de var .
EDIT: edc65'in işaret ettiği gibi, bunların çoğu kullanım i.toString(36)
yerine kısalır 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
Bunun fonksiyon dönüş değeri olarak adlandırılabilecek en kısa yol olduğuna inanıyorum:
eval("for(i=9,a='';++i<36;)a+=i.toString(36)") // 46 bytes
Bir işlevden elle döndürmekten üç bayt daha kısadır:
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
Tabii ki, x=>"abcdefghijklmnopqrstuvwxyz"
hala her şeyi atar.