Ich bin mir ziemlich sicher, dass es keinen besseren Weg gibt, aber ich dachte, es könnte nicht schaden, danach zu fragen.
Ich bin es leid zu tippen a='abcdefghijklmnopqrstuvwxyz'
.
Coole Sprachen haben Range('a'..'z')
oder ähnliches
Was können wir mit JS anfangen, das so kurz wie möglich ist?
for(i=97,a='';i<123;){a+=String.fromCharCode(i++)}
ist länger als nur das Alphabet - aber garantiert vermassle ich es nicht irgendwo.
Ich hoffe, es gibt eine unangenehme Art, Az in weniger als 50 Zeichen zu erzeugen.
Ich habe rumgespielt i=97;Array(26).map(x=>String.fromChar....i++
Aber es dauerte immer viel länger, bis ich mich anschloss und das Array (26) aufteilte, um nutzbar zu sein
Edit: Ich habe es geschafft
[...Array(26)].reduce(a=>a+String.fromCharCode(i++),'',i=97)
60 Bytes
code-golf
tips
javascript
Charlie Wynn
quelle
quelle
[...Array(26)].map((q,w)=>String.fromCharCode(w+97))
ist 52 Bytes und fügen Sie eine weitere 7 für die.join``
[...Array(26)].map((q,w)=>String.fromCharCode(w+97)).join``
Antworten:
Alternative zu String.fromCharCode
... wenn Sie nur mit Kleinbuchstaben zufrieden sind.
quelle
Hinweis: Alle diese Techniken weisen der Variablen die alphabetische Zeichenfolge zu
a
.Ich bin zu 99% sicher, dass der kürzeste Weg, dies in JavaScript zu erreichen, tatsächlich ist:
Es gibt aber noch einige andere interessante Methoden. Sie können die Zeichenfolgenkomprimierung verwenden:
Sie können die komprimierte Zeichenfolge von abrufen
atob`abcdefghijklmnopqrstuvwx`
. Das'yz'
muss manuell hinzugefügt werden, da wenn Sie die gesamte Zeichenfolge komprimieren, das Ergebnis jedoch nur 27 Byte beträgt, es sich als ergibtabcdefghijklmnopqrstuvwxyw==
.Ich glaube, der kürzeste Weg, dies programmatisch zu tun, ist auch die von Ihnen vorgeschlagene Methode:
Sie können dies mit ES6-Funktionen ( Vorlagenzeichenfolgen
``
, Spread-Operator...
) tun , wenn Sie Folgendes möchten:Sie können mit einer Variablen besser vorgehen als mit
.join``
:Oder ES7 mit Array-Verständnis , das ein weiteres Byte kürzer ist:
Durch vorheriges Erstellen der Variablen wird ein weiteres Byte gespeichert:
Auch
String.fromCharCode
akzeptiert mehrere Argumente und wird automatisch join them. So können wir jede ES6-Version auf 57 Bytes reduzieren:Und die ES7 bis 55:
Wenn Sie mehr über Golfplätze erfahren möchten, lesen Sie diese Tipps . Es gibt auch eine Erklärung zum Array-Verständnis von ES7 .
EDIT: Wie edc65 herausgestellt hat, werden die meisten davon kürzer mit
i.toString(36)
anstelle vonString.fromCharCode(i)
:Ich glaube, dieses ist das kürzeste, das als Funktionsrückgabewert aufgerufen werden kann:
Es ist drei Bytes kürzer als das manuelle Zurückgeben von einer Funktion:
Natürlich
x=>"abcdefghijklmnopqrstuvwxyz"
schlägt noch alles andere.quelle
(f=(i=9)=>++i<36?i.toString(36)+f(i):'')()
Hier ist ein weiterer Ansatz, ein 51-Byte-ES6-Ausdruck:
Natürlich 50 Bytes in Großbuchstaben.
quelle
36 Bytes mit einem Trick, über den ich gerade erfahren habe (aus diesem Beitrag: /codegolf//a/176496/64538 ):
window.name
ist standardmäßig eine leere Zeichenfolge.Dies ist natürlich noch weniger praktisch als die 38-Byte-Lösung, da ein längerer Variablenname verwendet wird.
quelle
Verwendung dessen, was im globalen Bereich definiert sein kann oder nicht
39 Bytes für Objekteigenschaften für den Array-Abgleich
a-z
48 Bytes für eine unsortierte
Set
55 Bytes für eine sortierte
Set
67 Bytes für eine sortierte Zeichenfolge
quelle