Remarque: Toutes ces techniques affectent la chaîne alphabétique à une variable a
.
Je suis certain à 99% que le moyen le plus court d'y parvenir en JavaScript est en effet:
a="abcdefghijklmnopqrstuvwxyz" // 30 bytes
Mais il existe plusieurs autres méthodes intéressantes. Vous pouvez utiliser la compression de chaînes:
a=btoa`i·?yø!?9%?z)ª»-ºü1`+'yz' // 31 bytes; each ? represents an unprintable
Vous pouvez obtenir la chaîne compressée à partir de atob`abcdefghijklmnopqrstuvwx`
. Le 'yz'
doit être ajouté manuellement car si vous compressez la chaîne entière, alors que le résultat n'est que de 27 octets, il se transformera en abcdefghijklmnopqrstuvwxyw==
.
Je pense que le moyen le plus court de le faire par programme est également la méthode que vous avez suggérée:
for(i=97,a='';i<123;)a+=String.fromCharCode(i++) // 48 bytes
Vous pouvez le faire avec les fonctionnalités ES6 ( chaînes de modèle``
, opérateur de propagation...
) si vous voulez:
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
Vous pouvez faire mieux avec une variable au lieu de .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='')
Ou ES7 avec des compréhensions de tableau , qui est un autre octet plus court:
a=[for(_ of Array(i=26))String.fromCharCode(++i+70)].join`` // 59 bytes
La création de la variable au préalable enregistre encore un autre octet:
a='',[for(_ of Array(i=26))a+=String.fromCharCode(++i+70)] // 58 bytes
En outre, String.fromCharCode
accepte plusieurs arguments et les rejoindront automatiquement. Nous pouvons donc jouer à chaque version ES6 jusqu'à 57 octets:
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))
Et l'ES7 jusqu'à 55:
a=String.fromCharCode(...[for(_ of Array(i=26))++i+70]) // 55 bytes
Si vous souhaitez en savoir plus sur les parcours de golf, consultez cet ensemble de conseils . Il y a aussi un sur les compréhensions de tableau d'ES7 .
EDIT: Comme l'a souligné edc65, la plupart d'entre eux deviennent plus courts en utilisant i.toString(36)
au lieu de 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
Je crois que celui-ci est le plus court possible qui puisse être appelé comme valeur de retour de fonction:
eval("for(i=9,a='';++i<36;)a+=i.toString(36)") // 46 bytes
Il est trois octets plus court que le renvoyer manuellement à partir d'une fonction:
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
Bien sûr, x=>"abcdefghijklmnopqrstuvwxyz"
bat toujours tout le reste.