Примітка. Усі ці методи призначають рядок алфавіту змінною a
.
Я на 99% впевнений, що найшвидший спосіб досягти цього в JavaScript:
a="abcdefghijklmnopqrstuvwxyz" // 30 bytes
Але є кілька інших цікавих методів. Ви можете використовувати стиснення рядків:
a=btoa`i·?yø!?9%?z)ª»-ºü1`+'yz' // 31 bytes; each ? represents an unprintable
Ви можете отримати стислий рядок з atob`abcdefghijklmnopqrstuvwx`
. 'yz'
Повинні бути додані вручну , тому що якщо стиснути всю рядок, а результат всього 27 байт, то вийде , як abcdefghijklmnopqrstuvwxyw==
.
Я вважаю, що найкоротший спосіб це зробити програмно - це також запропонований вами метод:
for(i=97,a='';i<123;)a+=String.fromCharCode(i++) // 48 bytes
Ви можете зробити це за допомогою функцій ES6 ( рядки шаблону``
, оператор розповсюдження...
), якщо хочете:
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
Ви можете зробити одну кращу зі змінною замість .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='')
Або ES7 з розумінням масиву , що ще один байт коротший:
a=[for(_ of Array(i=26))String.fromCharCode(++i+70)].join`` // 59 bytes
Створення змінної заздалегідь зберігає ще один байт:
a='',[for(_ of Array(i=26))a+=String.fromCharCode(++i+70)] // 58 bytes
Також String.fromCharCode
приймає кілька аргументів і автоматично приєднується до них. Тож ми можемо гольфувати кожну версію ES6 до 57 байт:
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))
І ES7 один до 55:
a=String.fromCharCode(...[for(_ of Array(i=26))++i+70]) // 55 bytes
Якщо ви хочете дізнатися більше про поле для гольфу, ознайомтеся з цим набором порад . Також є одне про розуміння масиву ES7 .
EDIT: Як зазначав edc65, більшість із них стає коротшою, використовуючи i.toString(36)
замість 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
Я вважаю, що це найкоротший можливий показник, який можна назвати як повернене значення функції:
eval("for(i=9,a='';++i<36;)a+=i.toString(36)") // 46 bytes
Це на три байти коротше, ніж повернути його вручну з функції:
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
Звичайно, x=>"abcdefghijklmnopqrstuvwxyz"
все одно б'є все інше.