JavaScript, 62 61 37 byte
Cảm ơn @ Doᴡɴɢᴏᴀᴛ đã giúp đỡ!
Bản gốc [37 byte]:
f=_=>'f='+'_'.repeat((10+f).length)+f
Con [74 byte]:
f=______________________________________=>'f='+'_'.repeat((10+f).length)+f
Cháu [148 byte]:
f=________________________________________________________________________________________________________________=>'f='+'_'.repeat((10+f).length)+f
Thay thế (có in ra bàn điều khiển và dưới dạng chương trình đầy đủ):
Bản gốc [61 byte]:
f=_=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
Con [122 byte]:
f=______________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
Cháu [244 byte]:
f=________________________________________________________________________________________________________________________________________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
Làm thế nào nó hoạt động!
1. f=_=>
Xác định hàm f làconsole.log(...)
2. ;f()
Chạy chức năng f.
3. (trong chức năng f)
Ghi chú
console.log
là cần thiết thay alert
vì bởi vì alert
dường như không chơi tốt với các chuỗi thực sự dài (ít nhất là trên cấu hình máy / trình duyệt của tôi)
- Các
_
'được chèn vào tên của tham số (không sử dụng) của hàm f, để đảm bảo rằng chúng được bao gồm trong chuỗi của f.
- Cải tiến chính (ngoài việc loại bỏ
console.log
) giải pháp thứ nhất so với giải pháp thứ hai: thêm 10
vào hàm thay vì 0
chuyển nó thành chuỗi làm cho nó dài hơn một byte, loại bỏ sự cần thiết phải thêm 1 vào chiều dài sau đó, tiết kiệm một byte.