任务
在输入中将为您提供一个字符串,该字符串仅包含从a
to到的字符z
,即输入将与正则表达式匹配/^[a-z]*$/
。
您的输出应该是使用相同语言的完整程序,其源代码包含输入,并且是适当的代码。
例
您的程序将接收输入abc
和输出:
...abc...
上面的代码应该是一个完整的程序,使用相同的语言,并且没有输入和输出:
...abc...
即它输出自己。
计分
这是代码高尔夫球。以字节为单位的最短答案将获胜。
在输入中将为您提供一个字符串,该字符串仅包含从a
to到的字符z
,即输入将与正则表达式匹配/^[a-z]*$/
。
您的输出应该是使用相同语言的完整程序,其源代码包含输入,并且是适当的代码。
您的程序将接收输入abc
和输出:
...abc...
上面的代码应该是一个完整的程序,使用相同的语言,并且没有输入和输出:
...abc...
即它输出自己。
这是代码高尔夫球。以字节为单位的最短答案将获胜。
Answers:
lambda x:"s='s=%r;print(s%%s)';print(s%s)".replace('s',x+'x')
从这里开始使用基本的python 3 quine,并用输入替换变量名。
注:由于在评论中所指出的Hyper中微子,这是行不通像保留关键字 for
,if
等等。
追加一个没有保留关键字结尾的字符,例如'x'
或任何数字,即可解决此问题。(ØrjanJohansen)。
"for"
或Python中的任何其他保留字。
'x'
。
;“¶Ø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"
,当外部程序完成时隐式显示该返回值。
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")
fst
提取正文。show
将整个元组变成字符串。mappend
合并前两个功能。方便地mappend
在两个函数上给出了一个函数,该函数将每个函数应用于其参数,并将结果与mappend
结果类型组合在一起(此处为字符串连接)。(~aSaS(:^)S):^
用作(test)(~aSaS(:^)S):^
–本身就是一个藜。
(test)
并且(~aSaS(:^)S)
是字符串文字,因此请将其放置在堆栈上,并将其放在顶部。:
将(~aSaS(:^)S)
字符串复制到堆栈顶部,然后^
将其内容作为子程序运行。~
交换堆栈中的前两个元素,因此现在(test)
位于最上面。a
包装(test)
中额外的括号。S
将字符串((test))
放在堆栈顶部,并在不带外部括号的情况下打印该字符串(这只是文字语法)。aS
将剩余的(~aSaS(:^)S)
内容类似地打印(带有括号)。(:^)S
打印最后的:^
。)(
我认为,这实际上并不能作为输入。
a
- z
。
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
换句话说,它将打印一个包含自身的字符串文字,其后是:^
。显然,这是一个问题(因为刚打印的内容与我们最初运行它所执行的代码相同)。
a
,只要您不介意在输入包含时打印到stderr的分段错误错误a
。
ñ"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
不会运行任何宏。
"{']C'.%q[}]C"F
使用格式
{']C'.%q[}]C}
%q
qouted输入在哪里,构建出风味的奎因
{']C'."Some Text"[}]C
这是标准的RProgN2 quine,{']C'.}]C
在完成之前,追加并销毁输入的字符串。
字节数假定为ISO 8859-1编码。
\(\`^
¶\(*S1`|
对于input x
,输出:
\(*S1`|x
\(*S1`|x
输出是对标准quine的较小修改。我们只使用正则表达式|x
而不是空的正则表达式。由于|
仍然允许(和优先顺序)和空匹配,因此功能本身不会受到影响,并且x
只会包含字母,因此可以保证它是有效的正则表达式语法。
实际打印时使用的技术类似于卷子本身。为了避免重复,我们¶\(*S1`|
只在字符串的开头插入一次。这恰好是源代码的一半。要在没有换行的情况下打印两次,我们使用configuration \(\
,它将整个程序包装在一个组中,并使舞台本身以及包含它的组在没有换行的情况下打印结果。
"\"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)
"`_~"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";
。
$=_=>`$=${$}/*${_}*/`