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


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.