Anagram Quine高尔夫


24

这个问题中,我要求您根据其输出猜出一个七巧板奎因。但是,看来我们没有要打高尔夫球七字谜的问题。因此,您的任务将是制作最短的字谜奎因。

什么是七巧板奎因?

anagram quine是一个非空程序,会打印其原始源代码以外的源代码的anagram。

这是Python 2中的字谜奎纳的示例:

print`'`print`*2'*2`

您不应该阅读自己的资料来应对这一挑战。


2
@LeakyNun不,它不能是奎因。
小麦巫师

2
输出的代码是否必须是有效程序?
MD XF

1
@MDXF不,不是。
小麦巫师

2
@Okx应该遵循我们对标准包装盒的要求(不是标准包装盒)。
小麦巫师

1
@LeakyNun提醒您,我不认为0字节程序的字谜与原始字母也不一样!
尼尔

Answers:


29

Pyth,2个字节

)(

产出

()

在线尝试!

)  # Ends statement, does nothing in this program
 ( # Create an empty tuple
   # Implicitly print the empty tuple

3
这是否意味着您发现那()是比众所周知的 短得多的藜jN*2]"jN*2]
吉姆(Jim

1
@Jim不,因为这不具有有效载荷能力:c
Rod Rod

9

V,4个字节

2ii2

输出:

i2i2

在线尝试!


2x插入i2
CalculatorFeline

1
是的 2 -> do the next thing twice i -> insert the following
莱利

啊,我明白了,我以为这是Vim。
小麦巫师

@WheatWizard不,这是对标准V quine的微不足道的修改。
莱利

1
@isaacg:不,在Vim中,完成后需要按ESC,这是一个问题,因为输出中没有ESC字符。

9

> <>9 8 7字节

@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<!有点短。
小麦巫师

@WheatWizard谢谢,那真是一个
完美的

1
您可以获得7个字节:":1->o#
Conor O'Brien

@ ConorO'Brien感谢您的提示,这真的很聪明。
Kritixi Lithos

谢谢:)我很惊讶它在这里比实际的
Conor O'Brien

9

Brainfuck,158个字节

>>--<<-[[<+>->+>->+++<<<]>-]<<<<<<[--->>.<<]>>++<<<[->>>.<<<]>>-<<<[--->>>.<<<]>>>--<<<<[++>>>>.<<<<]>>>>+++>--.[---<.>]>+.......++.......<<<>>>>>>>>>-----+++

在线尝试!

它可能不是最短的版本,但至少可以使用。

有趣的是,输出代码实际上可以执行(并且确实会终止)。

输出量

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>--------------------------++++++++++++++++++<....................[[[[[[[]]]]]]]

说明

>>--<<-[[<+>->+>->+++<<<]>-]    Initializes the tape with the
                                help of a recurrence relation.
<<<<<<[--->>.<<]>>++<<<[->>>
.<<<]>>-<<<[--->>>.<<<]>>>--    Prints the characters using
<<<<[++>>>>.<<<<]>>>>+++>--.    classic loops.
[---<.>]>+.......++.......

<<<>>>>>>>>>-----+++            Junk to complete the anagram.

8

Python 3,32个字节

print(“”“ p” r“ i” n“ t” 2(“)*”“” * 2)

打印p"r"i"n"t"2(")*p"r"i"n"t"2(")*\n,排序输出:\n""""""""""""(())**22iinnpprrtt


糟糕,旧版本:(
CalculatorFeline

1
@Downvoter请取消投票。
CalculatorFeline

7

红宝石,8字节

p"p*2"*2

在线尝试!

此打印

"p*2p*2"

说明

这个工作类似于问题中的python答案。它将生成字符串,p*2p*2然后使用Ruby p来打印字符串的表示形式。


您可以使用p代替puts?!浪费了很多时间……
魔术章鱼缸

4
@carusocomputing与puts完全不一样。p x等效于puts x.inspect
Conor O'Brien

6

JavaScript(ES6),40 32字节

f=($=`($)=>{$=$+"${"``"}$"}`)=>$+$

也不要乱用Function.toString。另外,字符串中的代码几乎看起来合法。编辑:使用+代替节省了8个字节repeat(2)


1
为什么不使用*2代替而.repeat(2)不是呢?
Magic Octopus Urn

1
@carusocomputing JavaScript不会*为字符串超载
Conor O'Brien

1
@carusocomputing这给了我一个主意,谢谢!
尼尔


4

Japt10 9字节

找到了更好的方法:-)

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的字符串中间加上引号。


另一个10人:Q+"+Q² " ²
Conor O'Brien

@ ConorO'Brien Yep,您总是可以在24个可能的排列中的每一个中,在字符串内排列4个字符。我也相信您总是可以用换行符替换两个空格
ETHproductions

3

Ruby,20个字节

$><<%q($><<%q()*2)*2

这个输出

$><<%q()*2$><<%q()*2

利用Ruby的%q(...)字符串语法,该语法支持嵌套括号。


3

视网膜,8字节


_

$nn$

在线尝试!

版画


n$_
n$

两者都包含一个_,两个n,两个$和三个换行符。

请注意,换行符后跟几乎所有其他字符都是不重要的解决方案,但是是否有效还存在疑问,因为第二个字符仅对其自身进行编码,而换行符实际上并未对任何一个输出字符进行编码。

说明


_

将空输入替换为_


$nn$

匹配一个空字符串(发生在之前或之后),_并插入换行符($n),an n和a $。自从我们第一次插入that以来_,这两个字符都相加了两次,因此nand $占了$n,我们在输出中获得了三个换行符中的两个。因为Retina默认会打印尾随换行符,所以会打印第三个换行符。

我们也可以n$n$在此阶段使用它,然后打印:

n
$_n
$


3

Python Repl,4个字节

这是我的第一个Code Golf解决方案,所以我希望它符合规则。在Python 2或3交互式解释器中:

>>> (1),
(1,)

输出是输入的字谜。


另一个:

>>> 2*'2*'
'2*2*'

在Python 2中:

>>> type('rst <>'),
(<type 'str'>,)

在Python 3中:

>> {1, 0}
{0, 1}

2017年6月15日更新:另一个:

>>> 01.
1.0

1
我认为这里的最后一个答案违反了Quine规则(输出中的所有字符与输入中的匹配字符具有相同的目的)。其他的都很好,但是。

2

Haskell38 39字节

main=print$[0,0]>>"main=print$[0,0]>>"

在线尝试!输出:

"main=print$[0,0]>>main=print$[0,0]>>"

编辑:+1个字节,因为我以前忘记了的隐式尾随换行符print


替代方法:(相同的字节数,但不包含ASCII-owl)

main=print$e++e;e="main=print$e++e;e="

在线尝试!

输出:

"main=print$e++e;e=main=print$e++e;e="

只是一个
七巧板

2

Groovy,24个 20字节

{"""{""*""2""}"""*2}

-4感谢CalculatorFeline,毕竟不需要空格!

输出:

{""*""2""}{""*""2""}

说明:

匿名闭包,当被调用时,返回{""*""2""}两次(连接)。


1
请解释。另外,字节(可以)可以通过使用*2引号之间的填充来保存:{"""{""*""2""}"""*2}
CalculatorFeline

@CalculatorFeline这很容易解释。但是,是的,这比我的想法好<s> 100%</ s> 9%。
Magic Octopus Urn

3
实际上,它仅好9%:P
CalculatorFeline

2

05AB1E,10个字节

'∞∞''∞'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''∞∞

2

CJam,6个字节

"_`"_`

在线尝试!

版画

_`"_`"

说明

"_`"   e# Push this string.
_      e# Duplicate.
`      e# Stringify it, which wraps it in quotes.
       e# Implicitly print stack contents.

我正要发布此消息...“`_” _`也有效
Luis Mendo

1

Bash,36个字节

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并插入""到单引号部分内即可产生此解决方案。



1

CJam,8个字节

"2*`"2*`

在线尝试!

说明

类似于问题中的Python示例

"2*`"     e# Push the string "2*`"
     2*   e# Repeat it twice
       `  e# Get its string representation (wrap in quotes)

输出为"2*`2*`"


1

Befunge,11个字节

' 2+">:#,_@

印刷品:

+2 '@_,#:>"

说明:

' 2+"        Put a " on the stack (32 + 2)
    "        Put the rest of the code on stack (wrap-around string)
     >:#,_   Print stack
          @  End

是。但是也是"。到底有什么限制?
MegaTom

我不认为这"是读取自己的源代码,它只是一个字符串文字。g但是很公然地阅读自己的资源。
小麦巫师

@WheatWizard好的。我会改变它。
MegaTom

":1+>:#,_@!也可以,但是不短。
小麦巫师

' 2+"8k,@9个字节
ovs

1

QBIC,8字节

?A+@?A@+

只是想出了如何在QBIC中制作适当的藜。通过简单地切换字符串文字中的字符就可以完成一个字谜。这种方式有24种可能的字谜。



1

欧姆,14个字节

"æ3M.Cæ"æ3M."C

在线尝试!

输出:

æ3M.CæC.M3æ"""

说明

"æ3M.Cæ"æ3M."C
"æ3M.Cæ"       # Pushes "æ3M.Cæ"
        æ      # Palindrone of that string
         3M    # 3 times...
           ."   # Push " on the stack
             C  # Concatenate with the string above


1

裂变29 8 6个字节

R"'!+O

在线尝试!

说明

在处创建一个原子R,该原子向右移动。然后",该原子遇到,开始打印模式。在打印模式下,将打印所有字符(直到匹配")。这意味着'!+OR在这种情况下将进行打印。然后,剩下的就是print ",这由其余字符完成。'!将原子的质量设置为的字符代码!,并将其+增加为的字符代码"。然后,输出字符代码O并破坏原子,从而结束程序。

(实际上,这只是最短的奎因的旋转)


我相信您可以使用标准quine并对其进行循环移位(例如R"'!+O,未经测试)。
Martin Ender

@MartinEnder:你是对的。更新。感谢您的帮助。
路加福音

1

Mathematica,2个字节

.0

输出:

0.

以小数点开头的数字(例如).123被解释为0.123,因此.0被解释为0.0。由于小数点后的数字部分为零,因此Mathematica不会打印它。


1
我认为这是不正确的。我们的站点定义要求quines具有“编码器”和“ decoder”,这禁止仅文字型quines。
小麦巫师

奎因的所有规则都延续了这一挑战。
小麦巫师

@WheatWizard:.编码本身,但是我不认为0呢?不能将小数点后的0明智地视为在小数点之前编码前导零,后者是打印浮点数的副作用。因此,按照旧的奎因规则,这里没有问题。(我不确定新规则是否已经生效。)

@ ais523我不知道。也许应该通过一个元问题来解决。
小麦巫师



1

Stax8个 4字节

.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.

0

05AB1E,13个字节

"34çJ∞"34çJ∞

输出:

34çJ∞""∞Jç43

在线尝试!

"34çJ∞"      # Push this string                 | [ 34çJ∞ ]
       34ç   # Push a quote (")                 | [ 34çJ∞, " ]
          J  # Join                             | [ 34çJ∞" ]
           ∞ # Mirror                           | [ 34çJ∞""∞Jç43 ]
             # Implicitly output with a newline
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.