Nota: tutte queste tecniche assegnano la stringa alfabetica alla variabile a
.
Sono sicuro al 99% che il modo più breve per raggiungere questo obiettivo in JavaScript è effettivamente:
a="abcdefghijklmnopqrstuvwxyz" // 30 bytes
Ma ci sono molti altri metodi interessanti. Puoi usare la compressione delle stringhe:
a=btoa`i·?yø!?9%?z)ª»-ºü1`+'yz' // 31 bytes; each ? represents an unprintable
È possibile ottenere la stringa compressa da atob`abcdefghijklmnopqrstuvwx`
. La 'yz'
deve aggiungere manualmente perché se si comprime l'intera stringa, mentre il risultato è solo 27 byte, si rivelerà come abcdefghijklmnopqrstuvwxyw==
.
Credo che il modo più breve per farlo a livello di codice sia anche il metodo che hai suggerito:
for(i=97,a='';i<123;)a+=String.fromCharCode(i++) // 48 bytes
Puoi farlo con le funzionalità ES6 ( stringhe di modelli``
, operatore di diffusione...
) se vuoi:
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
Puoi fare di meglio con una variabile anziché .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='')
O ES7 con comprensione dell'array , che è un altro byte più breve:
a=[for(_ of Array(i=26))String.fromCharCode(++i+70)].join`` // 59 bytes
La creazione anticipata della variabile salva un altro byte:
a='',[for(_ of Array(i=26))a+=String.fromCharCode(++i+70)] // 58 bytes
Inoltre, String.fromCharCode
accetta più argomenti e li unirà automaticamente. Quindi possiamo golf ogni versione ES6 fino a 57 byte:
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))
E quello ES7 fino a 55:
a=String.fromCharCode(...[for(_ of Array(i=26))++i+70]) // 55 bytes
Se vuoi saperne di più sui campi da golf, dai un'occhiata a questo set di suggerimenti . Ce n'è anche uno sulle comprensioni dell'array di ES7 .
EDIT: come ha sottolineato edc65, la maggior parte di questi si accorciano usando i.toString(36)
invece di 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
Credo che questo sia il più breve possibile che può essere chiamato come valore di ritorno di una funzione:
eval("for(i=9,a='';++i<36;)a+=i.toString(36)") // 46 bytes
È tre byte più breve rispetto alla restituzione manuale da una funzione:
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
Certo, x=>"abcdefghijklmnopqrstuvwxyz"
batte ancora tutto il resto.