JavaScript, 62 61 37 байт
Дякуємо @ Doᴡɴɢᴏᴀᴛ за допомогу!
Оригінальний [37 байт]:
f=_=>'f='+'_'.repeat((10+f).length)+f
Дочірня [74 байти]:
f=______________________________________=>'f='+'_'.repeat((10+f).length)+f
Онук [148 байт]:
f=________________________________________________________________________________________________________________=>'f='+'_'.repeat((10+f).length)+f
Альтернативно (з друком до консолі та як повноцінна програма):
Оригінальний [61 байт]:
f=_=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
Дочірня [122 байти]:
f=______________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
Онук [244 байти]:
f=________________________________________________________________________________________________________________________________________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()
Як це працює!
1. f=_=>
Визначте функцію f якconsole.log(...)
2. ;f()
Запустіть функцію f.
3. (у функції f)
Примітки
console.log
це потрібно замість того, alert
що, alert
здається, не добре грає з дійсно довгими рядками (принаймні, у моїй машині / конфігурації браузера)
- У
_
«и вставляються ім'я ( НЕ використовується) параметр функції F, щоб гарантувати , що вони включені в stringification з ф.
- Основне вдосконалення (окрім позбавлення від
console.log
) першого рішення над другим: додавання 10
функції замість того, 0
щоб перекидати її на рядок, робить її на один байт довше, усуваючи необхідність додавати 1 до довжини згодом, економлячи байт.