倒Quine!


11

我们都知道什么是。一个倒置喹是一个非空的程序,打印它的源代码不读它的源代码的倒数,和仅由可打印ASCII字符(空格通过~)。

此处,“源代码的逆序”表示以下含义:程序的输出必须包含每个可打印的ASCII字符(m-c)次,其中c是该字符在代码中出现的次数,m是最大值在代码中重复任何字符的次数。

(换句话说:您的代码 + 您的输出 = 所有可打印ASCII 的m乘以排列。)

例如,如果您的程序是12345,则m = 1,则应输出此字符串的任何排列:

 !"#$%&'()*+,-./06789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

如果您的程序是AAB,则m = 2,那么您应该输出以下任何排列:

  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@BCCDDEEFFGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~

请注意,有两个缺失As和一个失踪B

尽管一个包含所有可打印ASCII字符但不输出任何内容的程序是有效的反quine(满足m = 1),但是考虑到它的长度,这样的答案并不是很具有竞争力。

如上段所述,您将要编写一个反向的程序。因为这是,所以以字节为单位的最短程序将获胜。祝好运!


1
空格,制表符和换行符?
Stewie Griffin

11
您应该突出显示duplicated for every repeated character in the source code这将使挑战中的一切变得不同
Rod Rod

6
您能举一个反面的例子吗,其中多个字符被重复(并多次)?再说了,11234512345
朱塞佩

4
这如何重复?相关,是的。重复,不!它是这样的,你必须有重复的字符的语言更加困难。请注意,您也不能只复制一个字符串,因为必须从每个字符串中删除的字符数是变化的。
Stewie Griffin

1
@StewieGriffin我将VTC视为“不清楚”而不是“重复”,因为(几乎)每个答案都有评论,试图弄清楚duplicated for every repeated character in the source code该标准意味着什么或该提交是否有效,因为OP尚未解决这里的几个问题。
朱塞佩

Answers:


7

Brain-Flak221207字节

包括+1的 -A

(((((((()()()()){}){}()){}){})()){}{}){({}[()]<((((((()()()()){}){}){})<>[()()()])[()])((((()()()){})){}{})<>((()()()()){}){({}[()]<(({})())>)}{}({}()())<>{{({}<>[()]<(({})())><>)}{}<>(({}())()())<>}<>>)}{}

在线尝试!

# Push 206 (the number of times to duplicate the output)
(((((((()()()()){}){}()){}){})()){}{})

# For 0 to 206
{({}[()]<

    # Push 32 on this stack and 18, 28 and 29 to the other
    # 18, 28 and 29 are the distances between the sets of braces 
    ((((((()()()()){}){}){})<>[()()()])[()])((((()()()){})){}{})<>

    # For 0 to 8
    ((()()()()){}){({}[()]<

        # Push TOS, TOS + 1
        (({})())

    # end For 0 to 8
    >)}{}

    # Push TOS + 2 
    # skips '(' and ')'
    ({}()())

    # For each value on the off stack (18, 28, 28)
    <>{

        # For 0 to that number
        {({}<>[()]<

            # Push TOS, TOS + 1
            (({})())

        # End for 0 to that number
        ><>)}{}

        # Push TOS + 1, TOS + 3 (skips this set of braces)
        <>(({}())()())<>

    # End for each value on the off stack (18, 28, 28)
    }<>

 # End for 0 to 206
 >)}{}

我认为您应该只删除[五遍,而不是全部删除。请注意,2在示例中仅删除了一次。但是,挑战有点令人困惑。
Stewie Griffin

有趣的是,它比标准的quine短得多。+1:)
詹姆斯

2
这确实很la脚,而且有趣的是,比您的回答要有趣得多,但是从技术上讲,!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz {|}〜`会得到更好的分数:/
James James

6

CJam,17个字节

{s95c+'|,32>\-}_~

在线尝试!

版画

 !"#$%&()*./014678:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^`abdefghijklmnopqrtuvwxyz

说明

目的是修改标准奎因

{"_~"}_~

这样程序中就不会重复任何字符。这样做的原因是CJam具有一组不同的运算符,我们可以使用该运算符从可打印的ASCII范围中删除字符,但是没有考虑出现的次数。手动执行该操作可能会花费更长的时间,因此我需要确保每个字符仅出现一次,而我们不必担心出现的情况。

{      e# Quine framework. Executes the block while leaving another copy of the
       e# block on the stack.
  s    e#   Stringify the block, giving us "{s95c+'|,32>\-}".
  95c  e#   Convert 95 to a character, which gives us '_' without repeating
       e#   it in the source code.
  +    e#   Append it to the string. We don't need to worry about '~', we'll just
       e#   leave it out of the printable ASCII range to begin with.
  '|,  e#   Get a character range from the null byte up to '{'. This omits "|}~",
       e#   but those are in the program anyway, it doesn't matter.
  32>  e#   Discard the unprintable characters.
  \-   e#   Subtract the source string from the printable ASCII range.
}_~


2

05AB1E95 61 60字节(不是58 b / c,我不喜欢那个字节)

A?9L<J, !"'#$%&()*+-./:;=>@BCDEFGHIKMNOPQRSTUVWXYZ[\]^_`{|}~

在线尝试!

旧答案因“仅ASCII字符” 而无效许多命令在此处无效。

abcdefghijklmnopqrstuvwxyz012345678由于没有重复的字符,因此打印一次。


版本BCDEFGHIKMNOPQRSTUVWXYZ已删除:

正在进行中...我认为〜60字节与05AB1E中没有非ASCII字符的字节一样少。

05AB1E,58个字节

T5+FA'uK?Au"ADLJFKST"SK?9L<5KJ?} !#$%&()*>-./:;=@[]^_`{|~\

在线尝试!

由于重复的字符,输出输出x12:

['""', '55', '???', 'AAA', 'FF', 'JJ', 'KKKK', 'LL', 'SS', 'TT', 'uu']

它也不能完全正确终止,现在正在处理...


无效的旧答案(由于非ASCII字符)已被删除,请参阅编辑历史记录。


“反向quine是一个非空程序,它不读取其源代码就打印其源代码的反函数,并且仅由可打印的ASCII字符组成。” 我也一直在研究05AB1E答案,直到我注意到这一点。
KSmarts

1
@KSmarts已修复为76个字节的开销。
魔术章鱼缸

2
通常情况下,在代码高尔夫挑战,人们所期望的05AB1E做比,“拍的Java”更好。
KSmarts

@KSmarts 耸耸肩,如果您不让esolang轻松地按定义竞争,那么您应该得到一个讽刺的esolang答案:P。
魔术章鱼缸

0

Java 8,106 99 190字节

class i {/*{}!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`claibdefghjkmnopqrtuvwxyz|~*/}

您可以通过移开空间来打高尔夫球,i {因为您已经有空间
Okx

1
我相信,每一个字符必须出现在相同的次数这是有效的
罗伯托·格雷厄姆

我不确定是否能完全理解挑战,但这还class i{/*!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~*/}不够吗?它的源代码中包含所有可打印的ASCII,并且不输出任何内容。“该部分复制在源代码中的每个字符重复 ”适用于输出,所以即使s是在复制class*/因被复制/* */,输出四倍什么是仍然一无所获。
凯文·克鲁伊森

此外,如果我确实正确的话,您也可以将其打高尔夫球到:interface Z{}//!"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`bdghjklmopqsuvwxyz|~97 bytes
Kevin Cruijssen 17-10-18

0

使用Javascript(ES6),103个 101字节

_=>` !"#$%&'()*+,-.0123456789:;<?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~`//_=>\\

旧解决方案(使用时为103个字节alert

alert;;alert`\ \!"#$%&'()*+,-./0123456789:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_bcdfghijkmnopqsuvwxyz{|}~`

旧的(无效的)解决方案(96字节)

alert()// !"#$%&'*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdfghijkmnopqsuvwxyz{|}~

您有两个//,这意味着您必须输出可打印的字符,其中一个/已删除。(我认为)
Stewie Griffin

@StewieGriffin固定
Herman L
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.