Русская гнездовья

18

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

Матрешки Куклы <3

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

Например, программа куклы abcdбудет иметь программу N = 3 abababcdcdcd, которая будет печатать программу N = 2 ababcdcd, которая печатает оригинальную программу N = 1 abcd, которая, наконец, печатает N = 0, которая является пустой. Это должно теоретически работать для любого разумного значения N.

Правила:

  • Вот программа TIO, чтобы помочь генерировать программы куклы на основе вашей программы
  • Применяются стандартные правила Куайна
  • Стандартные лазейки применяются
  • «Содержит» означает непосредственно в центре предыдущей версии, поэтому ваше решение должно иметь положительное четное число байтов. Программа длиной 10 будет иметь копию оригинала, вставленную после пятого байта, затем еще одну после десятого байта и т. Д.
  • Один выходной пробел допускается в выходных данных
  • Поскольку это , ваша цель - сделать программу N = 1 максимально короткой.
  • Пояснение вашего кода будет оценено
Джо Кинг
источник
Сообщение песочницы (удалено)
Джо Кинг
Для чего Nизмеряется размер кода?
flawr
@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 в ответе , найти вложенную структуру (функции в данном случае).

user202729
источник
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.

Попробуем разные подходы, чтобы увидеть, могут ли они быть короче.

user202729
источник
2

постоянный ток , 4 байта

 []p

Подобно некоторым другим ответам, поскольку строки в разделителях dcstart ( [) и end ( ]) (то есть "не выполняют обе обязанности и т. Д.), Они могут быть вложены без каких-либо реальных усилий. pпечатать.

N = 1: попробуйте онлайн!

N = 2: попробуй вложенный!

N = 3: попробуйте это Nesteder!

brhfl
источник