Standar ECMAScript 6 menambahkan banyak fitur baru ke bahasa JavaScript, termasuk notasi fungsi panah baru .
Tugas Anda adalah menulis transpiler ES6-ke-ES5 dasar. Diberi hanya fungsi panah ES6 sebagai input, menghasilkan mitra ES5 yang kompatibel.
Ini kode-golf ! Semoga program terpendek dalam byte menang!
Dasar
Fungsi panah terlihat seperti ini:
(a, b, c) => { return a + b - c }
Dan ekspresi fungsi ES5 yang setara terlihat seperti ini:
function(a, b, c) { return a + b - c }
Secara umum, Anda dapat menyalin tubuh fungsi (semuanya di antara kurung kurawal) kata demi kata.
Pernyataan Pengembalian Tersirat
Alih-alih tubuh dengan kurung kurawal, ekspresi tunggal dapat digunakan; hasil dari ungkapan ini kemudian dikembalikan.
(a, b, c) => a + b - c
function(a, b, c) { return a + b - c }
Contoh lain:
(a, b, c) => (a + 1, b - 2 * c / 3)
function(a, b, c) { return (a + 1, b - 2 * c / 3) }
Sekali lagi, Anda cukup menyalin ekspresi kata demi kata - TETAPI berhati-hatilah agar Anda tidak menghasilkan jeda baris antara return
kata kunci dan kata kunci untuk menghindari penyisipan titik koma otomatis!
Satu argumen
Tanda kurung adalah opsional jika satu argumen disediakan.
foo => { return foo + 'bar' }
function(foo) { return foo + 'bar' }
Ruang putih
Terakhir, Anda harus dapat memperhitungkan sejumlah karakter spasi putih (spasi, tab, baris baru) sebelum atau setelah tanda kurung, variabel, koma, kurung kurawal, dan panah *.
( o , O
, _ )=>{
return "Please don't write code like this."
}
Apakah Anda memilih untuk mempertahankan spasi putih di output, itu terserah Anda. Simpan, hapus, atau tambahkan milik Anda - pastikan kode itu valid!
* Secara teknis ilegal jika panah datang segera setelah jeda baris, tetapi saya ragu fakta ini akan membantu Anda. :)
Cara cepat untuk memvalidasi output Anda:
Masuk var foo = <your output>; foo()
ke konsol browser Anda. Jika tidak mengeluh, Anda mungkin berada di jalur yang benar.
Lebih banyak aturan untuk para penyihir:
- Input adalah fungsi panah ES6 yang valid secara sintaksis.
- Asumsikan tubuh fungsi adalah ES5-kompatibel (dan tidak referensi
this
,super
,arguments
, dll). Ini juga berarti bahwa fungsi tidak akan pernah mengandung fungsi panah lain (tetapi Anda mungkin tidak berasumsi bahwa "=>" tidak akan pernah terjadi di dalam tubuh). - Nama variabel hanya akan terdiri dari huruf Latin dasar,
$
dan_
. - Anda tidak perlu mentranspilasikan fitur ES6 yang tidak terdaftar di atas (parameter default, operator lainnya, perusakan, dll).
- Ruang setelah
return
pernyataan adalah opsional jika diikuti oleh(
,[
atau{
. - Tidak sepenuhnya perlu mencocokkan kasus pengujian saya dengan tepat - Anda dapat memodifikasi kode sebanyak yang Anda butuhkan jika itu akan membantu menurunkan jumlah byte Anda. Sungguh, selama Anda menghasilkan ekspresi fungsi ES5 yang secara sintaksis valid, dan setara secara fungsional, berarti Anda hebat!
a =>\na
, di manafunction(a){ return\na }
sebenarnya akan kembaliundefined
tidak peduli apa nilainyaa
. Apakah kita perlu menangani ini?=>
?Jawaban:
JavaScript (ES6),
12311010097 byteDisimpan 3 byte berkat @Neil
Asumsikan input adalah fungsi panah yang valid secara sintaksis dan tidak ada yang lain. Benar menangani kasus ini
a =>\na
, meskipun tidak menangani tidak lebih pendek sejauh yang saya tahu.Output ketika kode dijalankan dengan sendirinya:
Saya dapat menyimpan 9 byte dengan format yang mungkin tidak valid:
Output untuk dirinya sendiri:
(Secara khusus,
function anonymous
itulah yang saya khawatirkan.)sumber
\(?(.*?)\)?\s*=>
mungkin menghemat 3 byte.Retina,
868079 byteCobalah secara Online!
Menyimpan satu byte berkat Neil
Disimpan 6 byte dengan bantuan dari ETHproductions
Edit: Memperbaiki kemungkinan baris baru di badan fungsi.
Solusi 75 byte dengan asumsi input tidak akan berisi
§
: Cobalah Online!sumber
\n
menyimpan byte.\s
termasuk¶
, jadi baris tiga bisa\s*$
menghemat 4 byte.\s
hanya cocok¶
ketikas
opsi konfigurasi ditambahkan. Namun demikian, itu menyelamatkan saya beberapa bytePHP, 112 byte
menerima input dari STDIN; jalankan bersama
-R
sumber