在这个问题中,我要求您根据其输出猜出一个七巧板奎因。但是,看来我们没有要打高尔夫球七字谜的问题。因此,您的任务将是制作最短的字谜奎因。
什么是七巧板奎因?
anagram quine是一个非空程序,会打印其原始源代码以外的源代码的anagram。
这是Python 2中的字谜奎纳的示例:
print`'`print`*2'*2`
您不应该阅读自己的资料来应对这一挑战。
在这个问题中,我要求您根据其输出猜出一个七巧板奎因。但是,看来我们没有要打高尔夫球七字谜的问题。因此,您的任务将是制作最短的字谜奎因。
anagram quine是一个非空程序,会打印其原始源代码以外的源代码的anagram。
这是Python 2中的字谜奎纳的示例:
print`'`print`*2'*2`
您不应该阅读自己的资料来应对这一挑战。
Answers:
@WheatWizard通过使用!
并递增获取了1个字节"
@ ConorO'Brien通过使用#
代替<!
":1->o#
输出"#o>-1:
。
":1->o#" Push this string (note that the IP wraps around)
: Duplicate the top value of the stack (35 from the "#")
1- Subtract one from it to get 34 ('"')
>o# Print every character on the stack until the program cannot pop any more and still tries to pop a value from the stack afterwards
The program exits with an error from not being able to pop a value from an empty stack
":1+>o<!
有点短。
":1->o#
>>--<<-[[<+>->+>->+++<<<]>-]<<<<<<[--->>.<<]>>++<<<[->>>.<<<]>>-<<<[--->>>.<<<]>>>--<<<<[++>>>>.<<<<]>>>>+++>--.[---<.>]>+.......++.......<<<>>>>>>>>>-----+++
它可能不是最短的版本,但至少可以使用。
有趣的是,输出代码实际上可以执行(并且确实会终止)。
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>--------------------------++++++++++++++++++<....................[[[[[[[]]]]]]]
>>--<<-[[<+>->+>->+++<<<]>-] Initializes the tape with the
help of a recurrence relation.
<<<<<<[--->>.<<]>>++<<<[->>>
.<<<]>>-<<<[--->>>.<<<]>>>-- Prints the characters using
<<<<[++>>>>.<<<<]>>>>+++>--. classic loops.
[---<.>]>+.......++.......
<<<>>>>>>>>>-----+++ Junk to complete the anagram.
print(“”“ p” r“ i” n“ t” 2(“)*”“” * 2)
打印p"r"i"n"t"2(")*p"r"i"n"t"2(")*\n
,排序输出:\n""""""""""""(())**22iinnpprrtt
f=($=`($)=>{$=$+"${"``"}$"}`)=>$+$
也不要乱用Function.toString。另外,字符串中的代码几乎看起来合法。编辑:使用+
代替节省了8个字节repeat(2)
。
*2
代替而.repeat(2)
不是呢?
*
为字符串超载
找到了更好的方法:-)
Q+2ç"Q+2ç
输出"Q+2çQ+2ç
。在线测试!
Q+2ç"Q+2ç // Implicit: Q = quotation mark
"Q+2ç // Take this string. Q+2ç
2ç // Repeat it twice. Q+2çQ+2ç
Q+ // Prepend a quote. "Q+2çQ+2ç
// Implicit: output result of last expression
也可能是Qi2ç"Qi2ç
,哪个打印出来Qi2çQi2ç"
。这是更接近标准的Japt quine:
"iQ ²"iQ ²
但是我不相信有任何简单的方法可以在9字节的quine的字符串中间加上引号。
Q+"+Q² " ²
_
$nn$
版画
n$_
n$
两者都包含一个_
,两个n
,两个$
和三个换行符。
请注意,换行符后跟几乎所有其他字符都是不重要的解决方案,但是是否有效还存在疑问,因为第二个字符仅对其自身进行编码,而换行符实际上并未对任何一个输出字符进行编码。
_
将空输入替换为_
。
$nn$
匹配一个空字符串(发生在之前或之后),_
并插入换行符($n
),an n
和a $
。自从我们第一次插入that以来_
,这两个字符都相加了两次,因此n
and $
占了$n
,我们在输出中获得了三个换行符中的两个。因为Retina默认会打印尾随换行符,所以会打印第三个换行符。
我们也可以n$n$
在此阶段使用它,然后打印:
n
$_n
$
{"""{""*""2""}"""*2}
-4感谢CalculatorFeline,毕竟不需要空格!
{""*""2""}{""*""2""}
匿名闭包,当被调用时,返回{""*""2""}
两次(连接)。
*2
引号之间的填充来保存:{"""{""*""2""}"""*2}
'∞∞''∞'JJ∞
∞∞''JJ''∞∞
Code | Explanation | Stack
-----------+----------------------------+-------------------
'∞ | Push literal '∞'. | ["∞"]
∞ | Mirror. | ["∞∞"]
'' | Push literal "'". | ["∞∞","'"]
∞ | Mirror. | ["∞∞","''"]
'J | Push literal 'J'. | ["∞∞","''","J"]
J | Join it all together. | ["∞∞''J"]
∞ | Mirror. | ["∞∞''JJ''∞∞"]
-----------+----------------------------+-------------------
| Implicit print. | ∞∞''JJ''∞∞
"_`"_`
版画
_`"_`"
"_`" e# Push this string.
_ e# Duplicate.
` e# Stringify it, which wraps it in quotes.
e# Implicitly print stack contents.
tee f<<<'tee f<<<""cat f'"''"
cat f
这个输出
tee f<<<""cat f''
tee f<<<""cat f''
(并创建文件f
作为副作用,但这是每个meta所允许的。)
程序和输出都有尾随换行符。
思考过程:我认为,除了将其分配给变量之外,两次输出字符串的最简单方法是
tee f<<<string
cat f
该字符串需要加引号,因为它将包含空格和<
字符,因此我有了
tee f<<<'tee f<<<cat f'
cat f
它几乎不起作用,除了它不输出引号。幸运的是,Bash通过简单地将它们彼此相邻来支持字符串文字串联,因此将其附加"''"
到herestring并插入""
到单引号部分内即可产生此解决方案。
' 2+">:#,_@
印刷品:
+2 '@_,#:>"
说明:
' 2+" Put a " on the stack (32 + 2)
" Put the rest of the code on stack (wrap-around string)
>:#,_ Print stack
@ End
"
。到底有什么限制?
"
是读取自己的源代码,它只是一个字符串文字。g
但是很公然地阅读自己的资源。
":1+>:#,_@!
也可以,但是不短。
' 2+"8k,@
9个字节
R"'!+O
在处创建一个原子R
,该原子向右移动。然后"
,该原子遇到,开始打印模式。在打印模式下,将打印所有字符(直到匹配"
)。这意味着'!+OR
在这种情况下将进行打印。然后,剩下的就是print "
,这由其余字符完成。'!
将原子的质量设置为的字符代码!
,并将其+
增加为的字符代码"
。然后,输出字符代码O
并破坏原子,从而结束程序。
(实际上,这只是最短的奎因的旋转)
R"'!+O
,未经测试)。
.0
输出:
0.
以小数点开头的数字(例如).123
被解释为0.123
,因此.0
被解释为0.0
。由于小数点后的数字部分为零,因此Mathematica不会打印它。
.
编码本身,但是我不认为0
呢?不能将小数点后的0明智地视为在小数点之前编码前导零,后者是打印浮点数的副作用。因此,按照旧的奎因规则,这里没有问题。(我不确定新规则是否已经生效。)
.S.S
直接回答这个问题。
旧版本,8字节
..b..LbL
替代版本具有相当便宜的技巧,几乎可以用任何语言将其应用于适当的奎因。
"43bL"34bL
因为 "34bL"34bL
在Stax中是适当的奎因。
还有一个版本,仅使用单字符字符串文字。
''c'Lc'cccLcLL
.S.S Generates powerset ["","S","S.","."]
Implicit flatten and output
..b Push string ".b"
..L Push string ".L"
b Duplicate both strings
L Concatenate all 4 strings to a single one.