Еще одна программа, и я вышел!


21

При заданном уровне вложенности целых чисел 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
code-golf  recursion  code-golf  kolmogorov-complexity  board-game  code-golf  number-theory  polynomials  code-golf  code-golf  array-manipulation  polyglot  alphabet  answer-chaining  code-golf  sequence  math  atomic-code-golf  abstract-algebra  proof-golf  code-golf  internet  code-golf  internet  code-golf  ascii-art  kolmogorov-complexity  code-golf  math  ascii-art  number  integer  code-golf  decision-problem  binary-matrix  code-golf  number  sequence  number-theory  code-golf  math  decision-problem  matrix  abstract-algebra  code-golf  string  keyboard  code-golf  fractal  code-golf  math  sequence  combinatorics  hello-world  vim  code-golf  sequence  code-golf  graphical-output  image-processing  code-golf  decision-problem  matrix  linear-algebra  code-golf  ascii-art  code-golf  math  code-golf  ascii-art  graphical-output  code-golf  string  code-golf  string  substitution  code-golf  string  ascii-art  code-golf  arithmetic  code-golf  number  array-manipulation  decision-problem  code-golf  kolmogorov-complexity  code-generation  fractal  code-golf  ascii-art  kolmogorov-complexity  code-golf  ascii-art  code-golf  string  array-manipulation  code-golf  music  code-golf  array-manipulation  code-golf  internet  stack-exchange-api  math  fastest-algorithm  code-golf  binary  bitwise  code-golf  date  code-golf  string  code-golf  sequence  integer  code-golf  arithmetic  number-theory  code-golf  string  random 

1
Читал задание и звучал как «эй, это выглядит очень знакомо…», а затем заметил ваш « Также связанный (в песочнице): Вдохновение исходного кода » на мой вопрос «Песочница». :) Я оставлю свой вопрос там, но удалю его через пару недель. Ваш в основном то же самое, за исключением добавления целочисленного параметра.
Кевин Круйссен,

1
Как предлагается здесь , разрешено ли возвращать анонимные функции вместо программ?
Арно

1
Включает ли "положительное целое число" 0?
Феликс Пальмен,

1
Вы выбрали программу по причине? По умолчанию это функция или программа? Разрешено ли иметь функцию, печатающую функцию?
Кевин Круйссен,

1
@StewieGriffin, потому что экранирование в подвыражениях или вложенных программах может быть проблематичным (и кто-то попросил кавычки в тестовой среде).
fireflame241

Ответы:


19

Желе , 2 байта

Ṿ¡

Попробуйте онлайн!

Ṿ¡  Main link; left argument (text) is x, right argument (repetitions) is y
 ¡  Repeat y times:
Ṿ   Uneval x; produce code that outputs x

хе-хе встроенные


Это сломано, «Привет» производит Привет, а не «Привет»
Tahg

10
@Tahg Ввод Jelly автоматически оценивается как код Python, если он не выдает ошибку. Если это так, то это просто строка. Вы должны сделать, '"hi"'чтобы увидеть ожидаемый результат
HyperNeutrino

19

JavaScript (ES6), 47 44 байта

Сохранено 3 байта благодаря @HermanLauenstein

Принимает ввод в синтаксис карри (n)(s).

n=>g=s=>`alert(atob("${btoa(--n?g(s):s)}"))`

пример

f(2)('PPCG')

Будет выводить:

'alert(atob("YWxlcnQoYXRvYigiVUZCRFJ3PT0iKSk="))'

Который напечатает:

'alert(atob("UFBDRw=="))'

Который напечатает:

'PPCG'

демонстрация

Более сложный пример, в котором alert()переопределены промежуточные результаты, которые выводятся на консоль и автоматически выполняются.


Альтернативная версия, 40 байт

Предложено @Shaggy

Этот возвращает анонимную функцию вместо полной программы.

n=>g=s=>`_=>atob("${btoa(--n?g(s):s)}")`

Не могли бы вы вернуть анонимную функцию вместо использования alert? 41 байт
Мохнатые

@ Шэгги, я действительно не знаю. Я спросил ОП.
Арно

Если нет, может быть, вы могли бы сойти с IIFE вместо 45 байтов.
Лохматый

-3 байта с использованием каррирования: n=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT(замените BT на backticks)
Herman L

@HermanLauenstein Спасибо! :)
Арно

10

sh + coreutils, 31 байт

yes exec sed 1d \$0|sed $1q;cat

Принимает nв качестве параметра командной строки и sSTDIN.


8
Этот код говорит: «Да, вы обязательно должны казнить меня».
RedClover

Можете ли вы добавить объяснение? У меня возникли проблемы с разработкой
JoshRagem

1
@JoshRagem yesмногократно печатает свою командную строку exec sed 1d $0( $метасимвол оболочки, поэтому он должен быть заключен в кавычки). sed $1qпрекращает печать после $1(т.е. n) строк. catзатем копирует входную строку. Полученный файл представляет собой shскрипт, который говорит оболочке заменить себя копией sedс параметрами 1dи именем файла скрипта. sedзатем пропускает первую строку файла и выводит остальные. Каждый сценарий имеет на один exec sed 1d $0префикс меньше , пока после nвыполнения не будет напечатан только исходный ввод.
Нил


5

Haskell, 17 байт

На момент написания этой статьи это самый короткий ответ для языка, не относящегося к гольфу .

Это функция, которая принимает sи nв этом порядке и возвращает результат или исходный код выражения, который при оценке возвращает следующий исходный код.

(!!).iterate show

Аргументация того, почему это имеет значение:

  1. Решения могут быть функциями.
  2. Их выходы могут быть функциями.
  3. Эти функции не имеют параметров.
  4. В Haskell, поскольку он ленив и все закручен, наиболее естественным - для практического программирования - определение функции с 0 параметрами совпадает с ее результатом; самая близкая альтернатива, функция с 1 параметром, которая игнорирует параметр, является глупой.

Если fзадано PPCGи в 2качестве его параметров, результатом является текст "\"PPCG\""(первая сгенерированная функция), который при оценке возвращает текст "PPCG"(вторая сгенерированная функция), а когда он оценивается, он возвращает PPCG.

Спасибо Ними за предложение сокращения.


В Haskell есть соответствующий вопрос Meta по вопросу о функциях без аргументов, хотя он еще не получил такого большого внимания и все еще имеет открытые вопросы: codegolf.meta.stackexchange.com/q/12924/56433
Laikoni

3

APL (Dyalog) , 24 23 байта

-1 благодаря нгн.

Это полная программа, которая запрашивает, sа затем nи печатает в STDOUT.

''''{⍺,⍨⍺,⍵/⍨1+⍵=⍺}⍣⎕⊢⍞

Попробуйте онлайн! (регистр 17 Deep опускается, так как он превышает предел вывода TIO - работает в автономном режиме)

подсказывать s

 дать это (отделить и )

''''{... }⍣⎕ запрашивать nи применять эту лямбду с одинарной кавычкой в ​​качестве левого аргумента много раз. обозначает левый аргумент (цитата) и обозначает правый аргумент (входной текст):

⍵=⍺ Логическое значение, где текст равен кавычке

1+ добавить одну

⍵/⍨ повторить каждый символ аргумента соответствующее количество раз

⍺, ставить цитату

⍺,⍨ добавить цитату

Это работает, потому что строки в APL 'разделены, а одинарные кавычки в строках удваиваются, в то время как другие символы не требуют экранирования.


Dyalog APL также поставляется с утилитой ( ⎕SE.Dyalog.Utils.repObj), которая генерирует выражение APL, которое оценивает его аргумент (аналогично неравномерному Jelly ). Следовательно, следующая программа эквивалентна вышеупомянутой, но работает для всех массивов:

SE.Dyalog.Utils.repObj⍣⎕⊢⎕

Попробуйте онлайн!


Я думаю, что APLX допускает строки с двойными и одинарными кавычками. Если остальное работает там, вы можете сохранить байт :) Раньше ngn / apl но я удалил ""
ngn

Подумайте о том, чтобы передать кавычку как .-, которая сохраняет (как минимум) байт.
нгн,

@ngn Спасибо, но у APLX нет dfns. NARS2000 имеет как двойные кавычки, так и dfns, но символы стоят по два байта каждый.
Адам

2

Firefox JavaScript, 41 35 байт

f=(s,n)=>"_=>"+uneval(--n?f(s,n):s)

У Firefox есть приятный uneval, который делает то, на что это похоже - не показывает данный объект, в данном случае - строку.


2

Java 8, 95 93 байта

String c(String s,int n){return"v->\""+(n-->1?c(s,n).replaceAll("[\\\\\"]","\\\\$0"):s)+'"';}

-2 байта благодаря @Lynn .

Экранирование специальных символов так раздражает в Java.

Попробуйте здесь и попробуйте полученный метод здесь .

Объяснение:

String c(String s,int n){  // Method with String and int parameters and String return-type
  return"v->\""+           //  Return literal "v->" + a leading double-quote +
   (n-->1?                 //   If `n` is larger than 1:
     c(s,n)                //    Recursive-call,
      .replaceAll("[\\\\\"]","\\\\$0")
                           //    with all double-quotes ('"') and slashes ('\') escaped
    :                      //   Else:
     s)                    //    The input String
   +'"';                   //   + a trailing double quote
}                          // End of method 

Дополнительное объяснение для замены регулярного выражения:

.replaceAll("[\\\\\"]","\\\\$0")
.replaceAll("        ","      ")  // Replace the match of the 1st String, with the 2nd
             [      ]             //  One of these inner characters:
              \\\\                //   Escaped slash ('\')
                  \"              //   Escaped double-quote ('"')
                                  //  And replace them with:
                        \\\\      //   Escaped slash ('\'),
                            $0    //   plus found match

Почему все эти косые черты?

\   →  \\       // Escapes a single slash for the regex
\\  →  \\\\     // Escapes both regex-escaped slashes for the String
"   →  \"       // Escapes a double-quote for the String

1
Я не думаю, что вам нужно убегать "в классе символов регулярных выражений, поэтому \\\\\"(пять обратных косых черт) должны быть в порядке.
Линн

2

Недогрузка , 11 байт

(a(S)*)~^^S

Попробуйте онлайн!

Ввод должен начинаться со стека, с числом сверху в виде церковной цифры . Я не знаю, является ли это допустимым методом ввода, но в спецификации нет входных данных, и размещение ввода на вершине стека кажется многопоточным методом, используемым в таких языках.



1

QuadR , 8 байт

Простой перевод ответа ngn .

Принимает в nкачестве аргумента и в sкачестве ввода.

^|'|$
'&

Попробуйте онлайн!

PCRE R заменяет все экземпляры

^|'|$ Начало строки ИЛИ Цитата ИЛИ Конец строки

'& с цитатой и весь матч

Аргумент указывает, сколько раз повторить преобразование.


ах, теперь я знаю, для чего этот язык :)
ngn

1

R , 62 байта

f=function(n,s){"if"(n,{formals(f)$n=n-1;formals(f)$s=s;f},s)}

Попробуйте онлайн!

Назовите это так: f(n,s)следуют nкопии()

Именованная функция; возвращает анонимную функцию. Все, что он делает, это изменяет значения по умолчанию для formalsof f, позволяя вызывать результирующую функцию (и затем результат этого вызванного, ntimes). когда nдостигает 0, он возвращается s.

R на самом деле не так уж плох в побеге! Он использует экранирование в стиле C, так что вам просто нужно взять ввод, заменить "на \"и \с \\, а затем обернуть все это " ".





0

Excel VBA (32-разрядная версия), 67 байт

Версия ограничена 32-битным Excel VBA, потому что 2^iоценивается без ошибок в 32-битном VBA, но не в 64-битном VBA

Функция анонимного непосредственного окна VBE, которая принимает входные данные nи данные sиз диапазонов[A1] и [B1]выводит анонимную функцию, которая при оценке вплоть до только терминала (после nитераций) выводит только sкак этот терминал

For i=0To[A1-1]:q=q+"?"+String(2^i,34):Next:?q[B1]Replace(q,"?","")

Пример ввода / вывода

[A1:B1]=Array(7, "PPCG")
For i=0To[A1-1]:q=q+"?"+String(2^i,34):Next:?q[B1]Replace(q,"?","")
?"?""?""""?""""""""?""""""""""""""""?""""""""""""""""""""""""""""""""?""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""PPCG"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
?"?""?""""?""""""""?""""""""""""""""?""""""""""""""""""""""""""""""""PPCG"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
?"?""?""""?""""""""?""""""""""""""""PPCG"""""""""""""""""""""""""""""""
?"?""?""""?""""""""PPCG"""""""""""""""
?"?""?""""PPCG"""""""
?"?""PPCG"""
?"PPCG"
PPCG
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.