Російська гніздова квітка


18

Російська лялька для гніздування, більш відома як лялька Матрьошка , - це лялька, яка містить меншу версію себе, яка потім містить іншу меншу версію себе, яка містить меншу версію себе, яка містить меншу версію себе, яка містить меншу версію себе ... - поки нарешті остання не порожня. Приклад:

Ляльки Матрьошка <3

Сьогодні ваша мета - наслідувати цю російську традицію, написавши програму або функцію, яка, коли вона містить себе N разів, надрукує себе, що містить N-1 копії себе разів.

Наприклад, програма ляльки abcdматиме програму N = 3 abababcdcdcd, яка буде друкувати програму N = 2 ababcdcd, яка друкує оригінальну програму N = 1 abcd, яка нарешті друкує N = 0, яка порожня. Це теоретично повинно працювати для будь-якого розумного значення Н.

Правила:

  • Ось програма TIO, яка допоможе генерувати лялькові програми на основі вашої програми
  • Діють стандартні правила Quine
  • Застосовуються стандартні лазівки
  • "Містить" означає безпосередньо в центрі попередньої версії, тому ваше рішення повинно мати додатне парне число байтів. Програма довжиною 10 матиме копію оригіналу, вставленого після п’ятого байта, потім ще одну після десятого байта тощо.
  • У висновку дозволено єдине пробільне пробіл
  • Оскільки це , ваша мета - зробити вашу програму N = 1 якомога коротшою.
  • Пояснення вашого кодексу буде вдячно


Для чого Nвимірюється розмір коду?
недолік

@flawr N = 1 .....
Джо Кінг


12
Це анімація справді потрібна ?!
Кудлатий

Відповіді:


9

Низький навантаження , 4 байти

N = 1: Спробуйте в Інтернеті.

 ()S

N = 2: Спробуйте в Інтернеті.

 ( ()S)S

N = 3: Спробуйте в Інтернеті.

 ( ( ()S)S)S

Пояснення:

Ясно, але я все одно додаю.

  • (...)S друкує що-небудь між дужками в STDOUT
  • Простір перед ним не має змоги зробити число байтів рівним і дотримуватися правил виклику.

9

JavaScript, 36 32 байти

Користується тим, що Function.prototype.toString() не бере ніяких аргументів, і тому ігнорує будь-які, які йому передаються.

Частково натхненний рішенням користувача202729 .

f=_=>f.toString( ).slice(14,-16)

Спробуй це

o.innerHTML=["<span>Five</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Four</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Three</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Two</span>",(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16))(),"<span>One</span>",(f=_=>f.toString( ).slice(14,-16))(),"<span>Thunderbirds Are Go!</span>"].join`\n`
span{font-weight:bold;font-size:16px;line-height:1.5em;text-transform:uppercase;}span:last-child{font-size:8px;}
<pre id=o></pre>


7

JavaScript (Node.js) , 46 байт

Повна програма. Так console.logтреба.

Скористайтеся ідеєю з цієї відповіді, щоб зберегти кілька байт.

l=console.log;   g=_=>{};l((''+g).slice(4,-1))

Спробуйте в Інтернеті! Спробуйте два рази в Інтернеті! Спробуйте в Інтернеті, три рази!


Мій підхід аналогічний тому , який використовується в Kevin Cruijssen в відповіді , знайти вкладену структуру (функції в даному випадку).


5

Желе , 16 байт

Ṿḣ-9Ḋð}“““““““““

Спробуйте в Інтернеті!

Подвоєне: спробуйте онлайн!

Потрійний: спробуйте онлайн!


Jelly не має ніякої нестабільної структури, але його рядкові літерали автоматично припиняються.


Ṿḣ-9Ḋ    First chain. (monadic)
Ṿ        Uneal. (to string)
 ḣ-9     Take the ead, ends at the -9'th character.
    Ḋ    equeue, remove the first character.

     ð             Terminate the first chain, start a new one.
      }            Convert the last monadic chain to a dyadic one.
       “““““““““   String literal.
                   This matches the pattern <dyad> <nilad>, so applies
                   the the corresponding rules. This way a link can take data
                   to the right of it.

Спробуємо різні підходи, щоб побачити, чи вони можуть бути коротшими.



2

постійного струму , 4 байти

 []p

Як і деякі інші відповіді, оскільки рядки в розділителях dcstart ( [) та end ( ]) (тобто "не виконують обох обов'язків тощо), вони нестабільні без реальних зусиль. pдрукувати.

N = 1: Спробуйте в Інтернеті!

N = 2: Спробуйте вкласти його!

N = 3: Спробуйте вкласти його!


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.