Tenho certeza de que não há uma maneira melhor de fazer isso, mas achei que não faria mal perguntar.
Estou cansado de digitar a='abcdefghijklmnopqrstuvwxyz'
.
Idiomas legais têm Range('a'..'z')
ou similar
O que podemos criar com o JS o mais curto possível?
for(i=97,a='';i<123;){a+=String.fromCharCode(i++)}
é mais do que apenas o alfabeto - mas garante que não estrago em algum lugar.
Espero que exista uma maneira desagradável de produzir az em menos de 50 caracteres.
Eu brinquei com i=97;Array(26).map(x=>String.fromChar....i++
mas sempre era muito mais longo quando entrei e depois dividi a matriz (26) para ser utilizável
Edit: Eu tenho que chegar até
[...Array(26)].reduce(a=>a+String.fromCharCode(i++),'',i=97)
60 bytes
code-golf
tips
javascript
Charlie Wynn
fonte
fonte
[...Array(26)].map((q,w)=>String.fromCharCode(w+97))
tem 52 bytes e adicione outros 7 para o.join``
[...Array(26)].map((q,w)=>String.fromCharCode(w+97)).join``
Respostas:
Alternativa ao String.fromCharCode
... se você estiver satisfeito com um alfabeto apenas em minúsculas.
fonte
Nota: Todas essas técnicas atribuem a sequência do alfabeto à variável
a
.Estou 99% certo de que a maneira mais curta de conseguir isso em JavaScript é de fato:
Mas existem vários outros métodos interessantes. Você pode usar a compactação de string:
Você pode obter a sequência compactada de
atob`abcdefghijklmnopqrstuvwx`
. Ele'yz'
deve ser adicionado manualmente, porque se você compactar a sequência inteira, enquanto o resultado for de apenas 27 bytes, será exibido comoabcdefghijklmnopqrstuvwxyw==
.Acredito que a maneira mais curta de fazer isso programaticamente também é o método que você sugeriu:
Você pode fazer isso com os recursos do ES6 ( cadeias de modelo
``
, operador de propagação...
) se desejar:Você pode fazer um melhor com uma variável em vez de
.join``
:Ou ES7 com compreensões de matriz , que é outro byte mais curto:
Criar a variável antecipadamente salva outro byte:
Além disso,
String.fromCharCode
aceita vários argumentos e os juntará automaticamente. Portanto, podemos jogar cada versão do ES6 com até 57 bytes:E o ES7 diminuiu para 55:
Se você quiser saber mais sobre os campos de golfe, confira este conjunto de dicas . Há também uma sobre as compreensões de matriz do ES7 .
EDIT: Como o edc65 apontou, a maioria deles fica mais curta usando, em
i.toString(36)
vez deString.fromCharCode(i)
:Eu acredito que este é o menor possível que pode ser chamado como um valor de retorno de função:
É três bytes menor que o retorno manual de uma função:
Claro,
x=>"abcdefghijklmnopqrstuvwxyz"
ainda supera tudo o resto.fonte
(f=(i=9)=>++i<36?i.toString(36)+f(i):'')()
Aqui está outra abordagem, uma expressão ES6 de 51 bytes:
50 bytes em maiúsculas, é claro.
fonte
36 bytes, usando um truque que acabei de aprender (a partir deste post: /codegolf//a/176496/64538 ):
window.name
é uma sequência vazia por padrão.Obviamente, isso é ainda menos prático que a solução de 38 bytes, pois usa um nome de variável mais longo.
fonte
Usando o que pode ou não ser definido no escopo global
39 bytes para que as propriedades do objeto correspondam à matriz
a-z
48 bytes para um não classificado
Set
55 bytes para uma classificação
Set
67 bytes para uma sequência classificada
fonte