打印包含输入的quine


15

任务

在输入中将为您提供一个字符串,该字符串仅包含从ato到的字符z,即输入将与正则表达式匹配/^[a-z]*$/

您的输出应该是使用相同语言的完整程序,其源代码包含输入,并且是适当的代码。

您的程序将接收输入abc和输出:

...abc...

上面的代码应该是一个完整的程序,使用相同的语言,并且没有输入和输出:

...abc...

即它输出自己。

计分

这是。以字节为单位的最短答案将获胜。

参考文献


3
嗯..像个“ quat”(奎纳+猫)吗?
马修·罗

Answers:


7

Python 3,57 61字节

lambda x:"s='s=%r;print(s%%s)';print(s%s)".replace('s',x+'x')

这里开始使用基本的python 3 quine,并用输入替换变量名。

注:由于在评论中所指出的Hyper中微子,这是行不通像保留关键字forif等等。

追加一个没有保留关键字结尾的字符,例如'x'或任何数字,即可解决此问题。(ØrjanJohansen)。


使用变量名很有创意。
Leaky Nun

3
不适用于input "for"或Python中的任何其他保留字。
HyperNeutrino'5

可以确认。它不适用于所有可能的输入。在线尝试
mbomb007 '17

@HyperNeutrino指出,还没有想到怎么去解决它
ç..

您可以在任何关键字的末尾附加一个额外的字符,例如'x'
与Orjan约翰森

6

果冻,9字节

发电机

;“¶Øv”ṾØv

在线尝试!

怎么运行的

;“¶Øv”ṾØv  Main link. Argument: s (string of letters)

;“¶Øv”     Concatenate s and the string "\nØv".
      Ṿ    Uneval; get its string representation.
           (implicit) Print the previous return value since the next link is an
           otherwise unparsable nilad.
       Øv  Set the return value to "Ṙv".

奎因

如果输入为quine,则会生成以下程序。

“quine
Øv”Ṙv

在线尝试!

怎么运行的

这是标准的果冻奎因。第一,

“quine
Øv”

将左参数和返回值设置为字符串"quine\nØv"

然后,打印一个字符串表示形式(上一个块中的代码)并返回未更改的字符串。

然后,v接受左参数并将其作为输入传递给Jelly程序

quine
Øv

在所有Jelly程序中,仅执行主链接(在最后一行中定义),因此第一行被完全忽略。

最后,Øv将返回值设置为"Ṙv",当外部程序完成时隐式显示该返回值。



4

Haskell,51个字节

q 接受一个字符串并返回一个字符串。

q s|t<-"main=putStr$fst`mappend`show$"=t++show(t,s)

在线尝试!

输出示例putStr$q"test"

main=putStr$fst`mappend`show$("main=putStr$fst`mappend`show$","test")

在线尝试!

  • 将主要的quine文本和所需的字符串放入一个元组。
  • 用于fst提取正文。
  • 用于show将整个元组变成字符串。
  • 用于mappend合并前两个功能。方便地mappend在两个函数上给出了一个函数,该函数将每个函数应用于其参数,并将结果与mappend结果类型组合在一起(此处为字符串连接)。

4

欠载,14字节

(~aSaS(:^)S):^

在线尝试!

用作(test)(~aSaS(:^)S):^–本身就是一个藜。

怎么运行的

  • 欠载是一种串联的(基于堆栈的)深奥的语言。它不支持读取输入,因此所有参数最初都会放入堆栈中。
  • (test)并且(~aSaS(:^)S)是字符串文字,因此请将其放置在堆栈上,并将其放在顶部。
  • :(~aSaS(:^)S)字符串复制到堆栈顶部,然后^将其内容作为子程序运行。
  • ~交换堆栈中的前两个元素,因此现在(test)位于最上面。
  • a包装(test)中额外的括号。
  • S将字符串((test))放在堆栈顶部,并在不带外部括号的情况下打印该字符串(这只是文字语法)。
  • 现在,aS将剩余的(~aSaS(:^)S)内容类似地打印(带有括号)。
  • 最后,(:^)S打印最后的:^

)(我认为,这实际上并不能作为输入。
Rɪᴋᴇʀ

@Riker是的,很遗憾,Underload不支持不匹配的括号。但问题是指定a- z
与Orjan约翰森

啊好吧。没注意到。
Rɪᴋᴇʀ

4

欠载,14字节

a(aS(:^)S)~*:^

在线尝试!

与其他欠载答案不同的方法;而不是本身是一个quine,而是构造了quine。有趣的是,它的字节数相同。此函数从堆栈中获取参数,然后输出到标准输出。

说明

a(aS(:^)S)~*:^
a               Generate a string literal containing the input
 (aS(:^)S)~*    Prepend "aS(:^)S"
            :^  Mockingbird: run the resulting function with itself as argument

结果函数如下所示:

aS(:^)S(input)
aS              Print a string literal containing the argument
  (:^)S         Print ":^"
       (input)  Push "input" onto the stack

换句话说,它将打印一个包含自身的字符串文字,其后是:^。显然,这是一个问题(因为刚打印的内容与我们最初运行它所执行的代码相同)。


看起来在TIO中,您可以删除首字母a,只要您不介意在输入包含时打印到stderr的分段错误错误a
与Orjan约翰森

我什至没有想到仅执行用户给出的字符串文字,这是基于该程序的工作已经完成并且没有(出现在输入中的字符,所有程序都将无济于事或崩溃。我什至不认为这是TIO特有的。该程序无效,但是在崩溃时已经产生了所需的输出。

2

V,9个字节

ñ"qPxÉÑ~j

在线尝试!

这是对标准V quine的修改,我为此感到骄傲,因为它只有一个字节长。

十六进制转储:

00000000: f122 7150 78c9 d17e 6a                   ."qPx..~j

说明:

ñ           " Record the following commands into register 'q'
 "qP        " Paste register 'q' before all input
    x       " Delete the last character of what we just pasted (this will be a 'ÿ')
     ÉÑ     " Insert 'Ñ' at the beginning of this line
       ~    " Toggle the case of this character
        j   " Move down a line. During playback, this will cancel playback of the current macro,
            " So everything after here is a NOOP

然后,录音隐式停止并播放。这将生成以下输出:

ñ"qPxÉÑ~jHello

由于j将中断宏的播放,因此Hello不会运行任何宏。


2

Python 2,38个字节

尽管仅需要支持输入a-z,但它应适用于任何不包含NUL字节的单行输入。

s='s=%r;print s%%s#'+input();print s%s

在线尝试

对于输入abc,生成的quine为:

s='s=%r;print s%%s#abc';print s%s#abc

在线尝试


1

RProgN 2,15字节

"{']C'.%q[}]C"F

解释

使用格式

{']C'.%q[}]C}

%qqouted输入在哪里,构建出风味的奎因

{']C'."Some Text"[}]C

这是标准的RProgN2 quine,{']C'.}]C在完成之前,追加并销毁输入的字符串。

在线尝试!


1

视网膜,14字节

字节数假定为ISO 8859-1编码。

\(\`^
¶\(*S1`|

在线尝试!

对于input x,输出:


\(*S1`|x
\(*S1`|x

说明

输出是对标准quine的较小修改。我们只使用正则表达式|x而不是空的正则表达式。由于|仍然允许(和优先顺序)和空匹配,因此功能本身不会受到影响,并且x只会包含字母,因此可以保证它是有效的正则表达式语法。

实际打印时使用的技术类似于卷子本身。为了避免重复,我们¶\(*S1`|只在字符串的开头插入一次。这恰好是源代码的一半。要在没有换行的情况下打印两次,我们使用configuration \(\,它将整个程序包装在一个组中,并使舞台本身以及包含它的组在没有换行的情况下打印结果。


1

Japt,14个字节

"\"iQ ²ª`"+U ²

在线测试!对于的输入abc,输出

"iQ ²ª`abc"iQ ²ª`abc

输出本身。在线测试!

说明

这是标准的支持有效负载的Japt quine的扩展:

"iQ ²"iQ ²

"iQ ²"      // Take this string.  iQ ²
      iQ    // Insert a quote.    "iQ ²
         ²  // Repeat this twice. "iQ ²"iQ ²
            // Implicit: output result of last expression

唯一的不同是我们ª`abc在末尾追加了代码,这在JavaScript中基本上是||"abc"。由于第一部分的结果始终是非空字符串(真),因此||永不运行。

有几种相同长度的替代版本:

"iQ ²ª`abc"iQ ²ª`abc   quine||"abc"
"iQ ²ª$abc"iQ ²ª$abc   quine||abc
"iQ ²ª{abc"iQ ²ª{abc   quine||function(){ ... }
"iQ ²ªXabc"iQ ²ªXabc   quine||X.a(...) (X could be any uppercase letter or digit)
"iQ ²//abc"iQ ²//abc   quine//abc      (// is a comment in JS/Japt)
"iQ ²;[abc"iQ ²;[abc   quine;          (unmatched [ causes a parsing error)

0

CJam16 14字节

"`_~"q`';++`_~

在线尝试!

怎么运行的

"`_~"           e# Push "`_~"
     q`         e# Push a string representation of the input (input wrapped in quotes)
       ';       e# Push a semicolon
         ++     e# Concatenate all this together
           `    e# Get the string representation of the resulting string
            _~  e# Duplicate it and eval it (pushing the original string on the stack again)

输出类似的东西"`_~\"test\";"`_~"test";



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.