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.loglà cần thiết thay alertvì bởi vì alertdườ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 10vào hàm thay vì 0chuyể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.