Ще одна програма і я виходжу!


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
Читав виклик і був схожий на "ей, це виглядає дуже знайомо ..", а потім помітив ваше " Також пов'язане (у пісочниці): натхнення вихідного коду " до мого питання про Sandbox. :) Я покину своє питання там, але видаляю його через пару тижнів. Ваш по суті той самий, за винятком додавання цілого параметра.
— Kevin Cruijssen

1
Як запропоновано тут , чи дозволяється повертати анонімні функції замість програм?
— Арнольд

1
Чи включає "додатне ціле число" 0?
— Фелікс Палмен

1
Ви вибрали програму чомусь? За замовчуванням - це функція чи програма? Чи дозволяється мати функцію друку функції?
— Kevin Cruijssen

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

hehe вбудовані


Це порушено, "привіт" виробляє привіт, а не "привіт"
— Tahg

10
@Tahg Jelly введення автоматично оцінюється як код Python, якщо він не видає помилки. Якщо так, то це просто рядок. Вам доведеться зробити '"hi"'очікуваний результат
— HyperNeutrino

19

JavaScript (ES6), 47 44 байт

Збережено 3 байти завдяки @HermanLauenstein

Здійснює введення в синтаксис currying (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 байт
— Shaggy

@Shaggy я насправді не знаю. Я попросив ОП.
— Арнольд

Якщо ні, то, можливо, ви могли б піти з IIFE замість 45 байт.
— Кудлатий

-3 байти за допомогою currying: n=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT(замініть BT на задній план)
— Herman L

@HermanLauenstein Дякую! :)
— Арнольд

10

sh + coreutils, 31 байт

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

Приймає nяк параметр командного рядка та sна STDIN.


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.

Завдяки nimi за те, що запропонували скоротити.


У Haskell є відповідне мета-питання щодо функцій без аргументів, хоча воно ще не приділяло такої уваги і все ще має відкриті запитання: codegolf.meta.stackexchange.com/q/12924/56433
— Laikoni

3

APL (Діалог) , 24 23 байти

-1 завдяки ngn.

Це повна програма, яка вимагає для, sа потім для nта друкує в STDOUT.

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

Спробуйте в Інтернеті!(17-ти глибокий випадок опущено, оскільки він перевищує вихідний ліміт 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копії()

Названа функція; повертає анонімну функцію. Все це робить зміни значення за замовчуванням з formalsз f, дозволяючи таким чином функція буде називатися (а потім результат цього називається, nраз). коли nдосягає 0, вона повертаєтьсяs .

R насправді не дуже поганий у втечі! Він використовує втечу в стилі С, тому вам просто потрібно взяти вхід, замінити "на \"і \з \\, а потім завернути все " ".





0

Excel VBA (32-бітний), 67 байт

Версія обмежена 32-розрядною VBA Excel, оскільки 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.