При заданном уровне вложенности целых чисел n
и строке s
печатных символов ascii ( для
~
вывода программы, которая при запуске на том же языке выводит программу, которая выводит программу ..., которая выводит строку s
.
Всего n
должно быть сгенерировано программ, все из которых должны быть выполнены на том же языке, что и ваш ответ.
Примечание: вы можете выводить программы или функции - все, что вам разрешено по умолчанию в качестве представления.
Вы можете вводить s
с помощью экранированных символов, как программа или функция на вашем языке обычно вводит строку.
пример
Например, с учетом n=1
и s="recursion"
, программа на Python 2 может вывести:
print "recursion"
Выполнение этого приведет к выводу:
recursion
Учитывая n=2
и s = "PPCG", программа на Python 2 может вывести:
print "print \"PPCG\" "
Запуск этого вывода:
print "PPCG"
Запуск этого вывода:
PPCG
Связанный (+ название вдохновения): еще один LUL и я вышел
Также связанные (в песочнице - теперь удалено, но все еще может быть просмотрено с достаточной репутацией): рекурсия исходного кода
Тестовые случаи
Убедитесь, что ваш код работает для следующих тестовых случаев (по одному на строку):
n s
2 PPCG
4 Robert'); DROP TABLE Students;--
17 Deep
2 Spaces In Here
3 "Don't forget quotes!"
5 'Backt`cks might be a h`tch'
6 5%s
8 [Brackets]<Are>(Great){Usually}
3 !"#$%&'()*+,-./ 0123456789:;<=>?@ABCDEFGHIJKLMN
6 OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
7 THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
3 the quick brown fox jumps over the lazy dog
источник
0
?Ответы:
Желе , 2 байта
Попробуйте онлайн!
хе-хе встроенные
источник
'"hi"'
чтобы увидеть ожидаемый результатJavaScript (ES6),
4744 байтаСохранено 3 байта благодаря @HermanLauenstein
Принимает ввод в синтаксис карри
(n)(s)
.пример
Будет выводить:
Который напечатает:
Который напечатает:
демонстрация
Более сложный пример, в котором
alert()
переопределены промежуточные результаты, которые выводятся на консоль и автоматически выполняются.Показать фрагмент кода
Альтернативная версия, 40 байт
Предложено @Shaggy
Этот возвращает анонимную функцию вместо полной программы.
источник
alert
? 41 байтn=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT
(замените BT на backticks)sh + coreutils, 31 байт
Принимает
n
в качестве параметра командной строки иs
STDIN.источник
yes
многократно печатает свою командную строкуexec sed 1d $0
($
метасимвол оболочки, поэтому он должен быть заключен в кавычки).sed $1q
прекращает печать после$1
(т.е.n
) строк.cat
затем копирует входную строку. Полученный файл представляет собойsh
скрипт, который говорит оболочке заменить себя копиейsed
с параметрами1d
и именем файла скрипта.sed
затем пропускает первую строку файла и выводит остальные. Каждый сценарий имеет на одинexec sed 1d $0
префикс меньше , пока послеn
выполнения не будет напечатан только исходный ввод.Python 2 , 40 байт
Попробуйте онлайн!
-4 байта благодаря xnor
источник
Haskell, 17 байт
На момент написания этой статьи это самый короткий ответ для языка, не относящегося к гольфу .
Это функция, которая принимает
s
иn
в этом порядке и возвращает результат или исходный код выражения, который при оценке возвращает следующий исходный код.Аргументация того, почему это имеет значение:
Если
f
заданоPPCG
и в2
качестве его параметров, результатом является текст"\"PPCG\""
(первая сгенерированная функция), который при оценке возвращает текст"PPCG"
(вторая сгенерированная функция), а когда он оценивается, он возвращаетPPCG
.Спасибо Ними за предложение сокращения.
источник
APL (Dyalog) ,
2423 байта-1 благодаря нгн.
Это полная программа, которая запрашивает,
s
а затемn
и печатает в STDOUT.Попробуйте онлайн! (регистр 17 Deep опускается, так как он превышает предел вывода TIO - работает в автономном режиме)
⍞
подсказыватьs
⊢
дать это (отделить⎕
и⍞
)''''{
...}⍣⎕
запрашиватьn
и применять эту лямбду с одинарной кавычкой в качестве левого аргумента много раз.⍺
обозначает левый аргумент (цитата) и⍵
обозначает правый аргумент (входной текст):⍵=⍺
Логическое значение, где текст равен кавычке1+
добавить одну⍵/⍨
повторить каждый символ аргумента соответствующее количество раз⍺,
ставить цитату⍺,⍨
добавить цитатуЭто работает, потому что строки в APL
'
разделены, а одинарные кавычки в строках удваиваются, в то время как другие символы не требуют экранирования.Dyalog APL также поставляется с утилитой (
⎕SE.Dyalog.Utils.repObj
), которая генерирует выражение APL, которое оценивает его аргумент (аналогично неравномерному Jelly ). Следовательно, следующая программа эквивалентна вышеупомянутой, но работает для всех массивов:Попробуйте онлайн!
источник
⍺
.-, которая сохраняет (как минимум) байт.Firefox JavaScript,
4135 байтУ Firefox есть приятный
uneval
, который делает то, на что это похоже - не показывает данный объект, в данном случае - строку.источник
Java 8,
9593 байта-2 байта благодаря @Lynn .
Экранирование специальных символов так раздражает в Java.
Попробуйте здесь и попробуйте полученный метод здесь .
Объяснение:
Дополнительное объяснение для замены регулярного выражения:
Почему все эти косые черты?
источник
"
в классе символов регулярных выражений, поэтому\\\\\"
(пять обратных косых черт) должны быть в порядке.Недогрузка , 11 байт
Попробуйте онлайн!
Ввод должен начинаться со стека, с числом сверху в виде церковной цифры . Я не знаю, является ли это допустимым методом ввода, но в спецификации нет входных данных, и размещение ввода на вершине стека кажется многопоточным методом, используемым в таких языках.
источник
GolfScript , 5 байт
Попробуйте онлайн!
источник
QuadR , 8 байт
Простой перевод ответа ngn .
Принимает в
n
качестве аргумента и вs
качестве ввода.Попробуйте онлайн!
PCRE R заменяет все экземпляры
^|'|$
Начало строки ИЛИ Цитата ИЛИ Конец строки'&
с цитатой и весь матчАргумент указывает, сколько раз повторить преобразование.
источник
R , 62 байта
Попробуйте онлайн!
Назовите это так:
f(n,s)
следуютn
копии()
Именованная функция; возвращает анонимную функцию. Все, что он делает, это изменяет значения по умолчанию для
formals
off
, позволяя вызывать результирующую функцию (и затем результат этого вызванного,n
times). когдаn
достигает0
, он возвращаетсяs
.R на самом деле не так уж плох в побеге! Он использует экранирование в стиле C, так что вам просто нужно взять ввод, заменить
"
на\"
и\
с\\
, а затем обернуть все это" "
.источник
Pyth, 21 байт
Попробуй это здесь.
К сожалению, рекурсивная функция (не полная программа, как указано выше) длиннее (24 байта):
источник
APL (Dyalog Classic) , 19 байтов
Попробуйте онлайн!
источник
Рубин , 34 байта
%p
является специфичным для Ruby флагом printf, который получаетinspect
значение своего аргумента, аналогично%r
Python.$><<
означает печать.Попробуйте онлайн!
источник
Excel VBA (32-разрядная версия), 67 байт
Версия ограничена 32-битным Excel VBA, потому что
2^i
оценивается без ошибок в 32-битном VBA, но не в 64-битном VBAФункция анонимного непосредственного окна VBE, которая принимает входные данные
n
и данныеs
из диапазонов[A1]
и[B1]
выводит анонимную функцию, которая при оценке вплоть до только терминала (послеn
итераций) выводит толькоs
как этот терминалПример ввода / вывода
источник