Jestem prawie pewien, że nie ma lepszego sposobu na zrobienie tego, ale pomyślałem, że nie zaszkodzi zapytać.
Mam dość pisania a='abcdefghijklmnopqrstuvwxyz'
.
Fajne języki mają Range('a'..'z')
lub podobne
Co możemy zrobić z JS tak krótkim, jak to możliwe?
for(i=97,a='';i<123;){a+=String.fromCharCode(i++)}
jest dłuższy niż tylko alfabet - ale gwarantuje, że gdzieś nie spieprzę.
Mam nadzieję, że istnieje nieprzyjemnie zmienny sposób na uzyskanie az w mniej niż 50 postaciach.
Pomyślałem z i=97;Array(26).map(x=>String.fromChar....i++
ale zanim dołączyłem, zawsze było o wiele dłużej, a potem podzieliłem tablicę (26), aby była użyteczna
Edycja: udało mi się
[...Array(26)].reduce(a=>a+String.fromCharCode(i++),'',i=97)
60 bajtów
code-golf
tips
javascript
Charlie Wynn
źródło
źródło
[...Array(26)].map((q,w)=>String.fromCharCode(w+97))
ma 52 bajty i dodaj kolejne 7 dla.join``
[...Array(26)].map((q,w)=>String.fromCharCode(w+97)).join``
Odpowiedzi:
Alternatywa dla String.fromCharCode
... jeśli jesteś zadowolony z samego alfabetu.
źródło
Uwaga: Wszystkie te techniki przypisują ciąg alfabetu zmiennej
a
.Jestem 99% pewien, że najkrótszą drogą do osiągnięcia tego celu w JavaScript jest:
Ale istnieje kilka innych interesujących metod. Możesz użyć kompresji ciągów:
Możesz pobrać skompresowany ciąg z
atob`abcdefghijklmnopqrstuvwx`
.'yz'
Należy dodać ręcznie, ponieważ jeśli skompresować cały ciąg, a wynik jest tylko 27 bajtów, to okaże się, jakabcdefghijklmnopqrstuvwxyw==
.Uważam, że najkrótszym sposobem, aby to zrobić programowo, jest również metoda, którą zasugerowałeś:
Możesz to zrobić za pomocą funkcji ES6 ( ciągi szablonów
``
, operator rozkładania...
), jeśli chcesz:Możesz zrobić jedno lepiej ze zmienną zamiast
.join``
:Lub ES7 ze zrozumieniem tablicowym , który jest kolejnym bajtem krótszym:
Wcześniejsze utworzenie zmiennej zapisuje kolejny bajt:
Również
String.fromCharCode
akceptuje wiele argumentów i będzie je automatycznie dołączyć. Możemy więc zagrać w golfa w każdej wersji ES6 do 57 bajtów:A ES7 jeden do 55:
Jeśli chcesz dowiedzieć się więcej o zakresach golfowych, zapoznaj się z tym zestawem wskazówek . Jest też jedno ze zrozumieniem tablicowym ES7 .
EDYCJA: Jak zauważył edc65, większość z nich staje się krótsza przy użyciu
i.toString(36)
zamiastString.fromCharCode(i)
:Uważam, że ten jest najkrótszy z możliwych, który można wywołać jako wartość zwracaną przez funkcję:
Jest trzy bajty krótszy niż ręczne zwracanie go z funkcji:
Oczywiście
x=>"abcdefghijklmnopqrstuvwxyz"
nadal bije wszystko inne.źródło
(f=(i=9)=>++i<36?i.toString(36)+f(i):'')()
Oto inne podejście, 51-bajtowe wyrażenie ES6:
Oczywiście 50 bajtów.
źródło
36 bajtów, używając sztuczki, o której właśnie się dowiedziałem (z tego postu: /codegolf//a/176496/64538 ):
window.name
domyślnie jest pustym ciągiem.Oczywiście jest to nawet mniej praktyczne niż rozwiązanie 38-bajtowe, ponieważ używa dłuższej nazwy zmiennej.
źródło
Używanie tego, co może, ale nie musi być zdefiniowane w zakresie globalnym
39 bajtów dla właściwości obiektu na dopasowanie tablicy
a-z
48 bajtów dla nieposortowanych
Set
55 bajtów dla posortowanego
Set
67 bajtów na posortowany ciąg
źródło