JavaScript, 62 61 37 byte
Terima kasih kepada @ Doᴡɴɢᴏᴀᴛ untuk bantuannya!
Asli [37 byte]:
f=_=>'f='+'_'.repeat((10+f).length)+f
Anak [74 byte]:
f=______________________________________=>'f='+'_'.repeat((10+f).length)+f
Cucu [148 byte]:
f=________________________________________________________________________________________________________________=>'f='+'_'.repeat((10+f).length)+f
Alternatif (dengan mencetak ke konsol, dan sebagai program lengkap):
Asli [61 byte]:
f=_=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
Anak [122 byte]:
f=______________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
Cucu [244 byte]:
f=________________________________________________________________________________________________________________________________________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
Bagaimana itu bekerja!
1. f=_=>
Tentukan fungsi f asconsole.log(...)
2. ;f()
Jalankan fungsi f.
3. (dalam fungsi f)
Catatan
console.log
diperlukan alih-alih alert
karena alert
tampaknya tidak berfungsi dengan baik dengan string yang sangat panjang (setidaknya pada konfigurasi mesin / browser saya)
- Itu
_
dimasukkan ke dalam nama parameter (tidak terpakai) dari fungsi f, untuk memastikan bahwa mereka termasuk dalam stringifikasi f.
- Peningkatan utama (selain menyingkirkan
console.log
) dari solusi pertama di atas yang kedua: menambahkan 10
fungsi alih-alih 0
melemparkannya ke string membuatnya satu byte lebih lama, menghilangkan kebutuhan untuk menambah 1 panjang setelahnya, menghemat satu byte.