JavaScript, 62 61 37 bytes
¡Gracias a @ Doᴡɴɢᴏᴀᴛ por la ayuda!
Original [37 bytes]:
f=_=>'f='+'_'.repeat((10+f).length)+f
Niño [74 bytes]:
f=______________________________________=>'f='+'_'.repeat((10+f).length)+f
Nieto [148 bytes]:
f=________________________________________________________________________________________________________________=>'f='+'_'.repeat((10+f).length)+f
Alternativo (con impresión a la consola y como programa completo):
Original [61 bytes]:
f=_=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
Niño [122 bytes]:
f=______________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
Nieto [244 bytes]:
f=________________________________________________________________________________________________________________________________________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
¡Cómo funciona!
1. f=_=> Defina la función f comoconsole.log(...)
2. ;f() Ejecutar la función f.
3. (en la función f)
Notas
console.log es necesario en lugar de alert porque alertno parece funcionar bien con cadenas realmente largas (al menos en la configuración de mi máquina / navegador)
- Los
_'s se insertan en el nombre del parámetro (no utilizado) de la función f, para garantizar que se incluyan en la cadena de f.
- Mejora principal (además de deshacerse de la
console.log) de la primera solución sobre la segunda: agregar 10a la función en lugar de 0convertirla en cadena hace que sea un byte más, eliminando la necesidad de agregar 1 a la longitud posterior, ahorrando un byte.