注意:所有这些技术都将字母字符串分配给variable a
。
我有99%的肯定是用JavaScript实现这一目标的最短方法是:
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
接受多个参数并将自动加入它们。因此,我们可以将每个ES6版本压缩到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"
仍然胜过其他一切。