注:これらの手法はすべて、アルファベット文字列をvariableに割り当てますa
。
JavaScriptでこれを実現する最短の方法は確かに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で、もう1バイト短くなっています。
a=[for(_ of Array(i=26))String.fromCharCode(++i+70)].join`` // 59 bytes
事前に変数を作成すると、さらに1バイト節約できます。
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
関数から手動で返すよりも3バイト短くなります。
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"
まだ他のすべてを打ち負かしています。