Dari apa yang saya lihat sepanjang waktu saya di PPCG, sebagian besar entri JavaScript yang melibatkan fungsi panah gemuk cenderung menjadi salah satu dari dua kubu:
Yang sederhana yang mampu berjalan sebagai pernyataan tunggal dan mengembalikan jawaban, langsung dari kelelawar, seperti
x=(a,b)=>a*a+b
Yang lebih kompleks yang biasanya memiliki kurung kurawal karena penggunaan loop, dan akibatnya memerlukan penggunaan a
return
pernyataan .. sepertip=b=>{m=b;for(a=1;~-m;)--m,a*=m*m;return a%b}
Mengambil contoh di atas dari kategori 2 dengan konsep kurung kurawal sebagai bukti konsep ... Apakah akan ada cara untuk melakukan golf ulang kode ini (atau serupa) seperti ini untuk menghilangkan kurung kurawal dan juga return
? Saya hanya menanyakan ini karena ini berpotensi (tidak mengatakan ini akan terjadi setiap saat) menghilangkan 8 byte dari kode pegolf JS. Apakah ada teknik yang bisa digunakan dalam hal ini? Saya sudah mencoba rekursi, tetapi m=b
pernyataan itu telah terbukti sebagai momok, karena sepertinya saya tidak bisa mengguncangnya.
Untuk kode di atas, bagaimana satu golf lebih jauh sehingga menghilangkan return
pernyataan, terlepas dari apakah golf lebih pendek atau tidak?
sumber
~-m
adalahm-1
, sehingga loop dapatfor(m=b,a=1;--m;a*=m*m)a%b;
dan versi rekursif dapat (belum diuji)b=>(f=a=>--m?f(a*=m*m):a%b)(1,m=b)
b=>b>1&(f=a=>--a<2||b%a&&f(a))(b)
Eval penyalahgunaan.
Itu mudah. Dari pada:
Menggunakan
Eval mengembalikan pernyataan yang terakhir dievaluasi. Dalam hal ini, karena pernyataan terakhir yang dievaluasi adalah
c+=n
, kita akan dibiarkanc
, bagaimanapun, menghemat dua byte.Secara umum:
lebih pendek dari ini, oleh byte:
Sebagai catatan, menggunakan kuburan untuk memanggil eval untuk menyimpan byte mungkin tidak berhasil, karena:
setara dengan
Bermanfaat untuk kebingungan! Tidak terlalu banyak untuk kode golf.
sumber
foo`string`
selalu setara denganfoo(["string"])
, hanya saja banyak fungsi kemudian membuang array kembali ke string yang diinginkan.