还有一个程序,我出去了!


21

给定一个正整数嵌套级n和字符串s的打印的ASCII字符(~,输出一个。方案,其中,以相同的语言运行时,输出一个程序,其输出程序输出该串s

总计 n应该生成程序,所有程序都应以与您的答案相同的语言运行。

注意:您可以输出程序或函数-默认情况下,您可以将任何内容作为提交提交。

您可以s使用转义字符输入,以您的语言编写的程序或函数通常会如何输入字符串。


例如,给定n=1s="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
如此处建议,是否允许返回匿名函数而不是程序?
Arnauld

1
“正整数”包括0吗?
菲利克斯·帕尔默

1
您选择程序是有原因的吗?默认是函数还是程序?可以打印功能吗?
Kevin Cruijssen

1
@StewieGriffin,因为转义子表达式或嵌套程序可能会出现问题(有人要求在沙箱中提供报价测试用例)。
fireflame241

Answers:


19

果冻,2个字节

Ṿ¡

在线尝试!

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

呵呵bui​​ldins


这是坏的,“嗨”会产生嗨,而不是“嗨”
Tahg

10
如果@Tahg Jelly输入没有引发错误,则会被自动评估为Python代码。如果是这样,那么它只是一个字符串。您必须要做的'"hi"'才能看到预期的结果
HyperNeutrino

19

JavaScript(ES6), 47 44字节

@HermanLauenstein节省了3个字节

以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)}")`

您能否返回一个匿名函数,而不是使用alert41位元组
Shaggy

@粗野的我真的不知道。我问过OP。
Arnauld

如果没有,也许您可​​以摆脱IIFE而获得45个字节。
毛茸茸的

-3个字节,使用currying :(n=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT用反引号替换BT)
Herman L

@HermanLauenstein谢谢!:)
Arnauld

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脚本,该脚本告诉Shell用sed带有参数1d和脚本文件名的副本替换自身。sed然后跳过文件的第一行并输出其余的行。每个脚本都有一个更少的exec sed 1d $0前缀,直到n执行后仅输出原始输入。
尼尔


5

Haskell,17个字节

截至撰写本文时,这是针对非高尔夫运动的最短答案语言。

它是一个函数,该函数按sn以该顺序执行,并返回结果或表达式的源代码,该表达式或源代码在被求值时将返回下一个源代码。

(!!).iterate show

为什么这很重要的争论:

  1. 解决方案被允许为函数。
  2. 它们的输出被允许为函数。
  3. 这些功能没有参数。
  4. 在Haskell中,由于它是懒惰的并且所有内容都是经过咖喱处理的,因此出于实际编程目的,最自然的0参数函数的定义与其结果相同;最接近的替代方案是忽略参数的1参数函数。

如果f给定PPCG2作为其参数,则结果为文本"\"PPCG\""(第一个生成的函数),该文本在求值时返回文本"PPCG"(第二个生成的函数),在求值时返回PPCG

感谢nimi建议缩短时间。


在Haskell中,有一个关于不带参数的函数问题的相关元问题,尽管该问题尚未引起足够的重视,但仍然存在未解决的问题:codegolf.meta.stackexchange.com/q/12924/56433
Laikoni

3

APL(Dyalog)24 23字节

-1感谢ngn。

这是一个完整的程序,提示您输入s然后提示n并打印到STDOUT。

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

在线尝试!(由于超过TIO的输出限制,因此省略了17个Deep案例–脱机工作)

提示输入 s

 产生(分离

''''{… 多次}⍣⎕ 提示n并应用带有引号的lambda作为左引数。代表左参数(引号),代表右参数(输入文本):

⍵=⍺ 文本等于引号的布尔值

1+ 加一

⍵/⍨ 复制参数的每个字符相应的次数

⍺, 加上报价

⍺,⍨ 附加报价

之所以可行,是因为APL中的字符串是'定界的,并且字符串中的单引号被加倍,而其他字符不需要转义。


Dyalog APL还附带了一个实用程序(⎕SE.Dyalog.Utils.repObj),该实用程序()会生成一个APL表达式,该表达式会对其参数进行求值(类似于Jelly的uneval)。因此,以下程序与上面的程序等效,但适用于所有数组:

SE.Dyalog.Utils.repObj⍣⎕⊢⎕

在线尝试!


我认为APLX允许“双引号”和“单引号”字符串。如果其余的都在那里工作,则可以保存一个字节:) ngn / apl曾经用过,但是我最近删除了“”
ngn

考虑将引号传递为.-,这样可以节省(至少)一个字节。
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

四核,8字节

简单翻译 ngn的答案的

需要n作为参数,s作为输入。

^|'|$
'&

在线尝试!

PCRE [R E放置的所有实例

^|'|$ 行首或报价或行尾

'& 加上报价和整个比赛

参数指定重复转换的次数。


啊,现在我知道该语言是什么意思了:)
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()

命名函数;返回一个匿名函数。它所做的就是修改默认值formalsf,使得到的函数的调用(然后的调用,结果n次)。当n到达0,返回s

R实际上在逃脱方面还不错!它采用C风格的转义,所以你只需要取输入,更换"\"\\\,然后裹在整个事情" "




0

Ruby,34个字节

%p是特定于Ruby的printf标志,该标志获取inspect其参数的值,类似于%rPython。$><<表示打印。

f=->n,s{"$><<%p"%(n>1?f[n-1,s]:s)}

在线尝试!


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.