หมายเหตุ: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 ของ comprehensions
แก้ไข:ตามที่ 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"
ยังคงเต้นทุกอย่างอื่น