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 alert
no 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 10
a la función en lugar de 0
convertirla en cadena hace que sea un byte más, eliminando la necesidad de agregar 1 a la longitud posterior, ahorrando un byte.