アナグラムクインのゴルフ


24

、この質問、私は、その出力に基づいてアナグラムQUINEを推測することができ尋ねました。しかし、アナグラム・クインにゴルフをすることをまだ質問していないようです。したがって、あなたの仕事は、できる限り短いアナグラム馬を作ることです。

アナグラムクインとは何ですか?

アナグラムクインは、元のソース以外のソースコードのアナグラムを出力する空でないプログラムです。

Python 2のアナグラムクインの例を次に示します。

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

この挑戦のためにあなた自身のソースを読むべきではありません。


2
@LeakyNunいいえ、それ馬ではありえません。
小麦ウィザード

2
出力されたコードは有効なプログラムでなければなりませんか?
MD XF

1
@MDXFいいえ、ありません。
小麦ウィザード

2
@Okxそれは、私たちの(クインである以外の)クインの標準的な要件に従う必要があります。
小麦ウィザード

1
@LeakyNun気をつけてください、0バイトのプログラムにはアナグラムがオリジナルと異なるとは思いません!
ニール

回答:



9

V、4バイト

2ii2

出力:

i2i2

オンラインでお試しください!


2x挿入i2
電卓

1
うん。2 -> do the next thing twice i -> insert the following
ライリー

ああ、私はこれがVimだと思った。
小麦ウィザード

@WheatWizardいや、これは標準のVのちょっとした修正です。
ライリー

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ありがとう、それはきちんとしたゴルフでした:)
Kritixi Lithos

1
:あなたは7バイト得ることができます":1->o#
コナー・オブライエン

@ ConorO'Brienヒントをありがとう、本当に賢い。
KritixiのLithos

ありがとう:)私はそれが実際の馬
コナーオブライエン

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ダウンダウンしてください。
電卓

7

Ruby、8バイト

p"p*2"*2

オンラインでお試しください!

これは印刷します

"p*2p*2"

説明

これは、質問のpython回答と同様に機能します。文字列を作成し、p*2p*2Rubyを使用して文字列pの表現を出力します。


?!のp代わりに使用できputsます。...多くの無駄な時間はそう
マジックタコ壺

4
@carusocomputingプットとはまったく同じものではありません。p xと同等ですputs x.inspect
コナーオブライエン

6

JavaScript(ES6)、40 32バイト

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

Function.toStringをいじることもありません。ボーナスとして、文字列内のコードはほとんど合法に見えます。編集:の+代わりにを使用して8バイトを保存しましたrepeat(2)


1
*2代わりにを使用しないのはなぜ.repeat(2)ですか?
魔法のタコUr

1
@carusocomputing JavaScriptは*文字列に対してオーバーロードしません
コナーオブライエン

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クインに近いものです。

"iQ ²"iQ ²

しかし、9バイトのクインの場合、文字列の中央に引用符を挿入する簡単な方法はないと思います。


別の10バイト:Q+"+Q² " ²
コナーオブライエン

@ ConorO'Brienええ、24の可能な順列それぞれの文字列内に4文字をいつでも配置できます。また、両方のスペースを常に改行で置き換えることができると信じています
-ETHproductions

3

ルビー、20バイト

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

この出力

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

%q(...)ネストされた括弧をサポートするRubyの文字列構文を利用します。


3

網膜、8バイト


_

$nn$

オンラインでお試しください!

プリント


n$_
n$

両方にone _、two n、two が含まれています$、3つの改行。

改行の後に他のほとんどの文字が続くのは簡単な解決策ですが、2番目の文字はそれ自体をエンコードするだけで、改行は実際にはいずれの出力文字もエンコードしないため、有効かどうかは疑問です。

説明


_

空の入力をに置き換え_ます。


$nn$

空の文字列に一致します。これは、前後に発生し_、改行($n)、an n、およびa を挿入し$ます。最初にを挿入した_ので、これらの文字がそれぞれ2回追加されるため、nandがを$占め$n、出力に必要な3つの改行のうち2つを取得します。Retinaはデフォルトで末尾の改行を印刷するため、3番目の改行が印刷されます。

また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-06-15:さらに別の:

>>> 01.
1.0

1
ここでの最後の答えは、クインの規則に違反すると思います(出力のすべての文字は、入力の一致する文字と同じ目的を果たします)。しかし、他は大丈夫です。

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""}2回(連結)を返す匿名クロージャー。


1
説明してください。また、*2引用符の間にasパディングを使用することにより、(おそらく)バイトを保存できます{"""{""*""2""}"""*2}
CalculatorFeline

@CalculatorFelineそれはかなり自明です。しかし、はい、それは私のものよりも<s> 100%</ s> 9%良いアイデアです。
魔法のタコUr

3
実際には、それは9%だけ良いです:P-
計算機

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


1

バッシュ、36バイト

tee f<<<'tee f<<<""cat f'"''"
cat f

この出力

tee f<<<""cat f''
tee f<<<""cat f''

(そしてf、副作用としてファイルを作成しますが、それは許可されていますはメタごとにます。)

プログラムと出力の両方に末尾の改行があります。

思考プロセス:文字列を2回出力する最も簡単な方法は、文字列を変数に割り当てることとは別に、

tee f<<<string
cat f

文字列にはスペースと<文字が含まれるため、引用符で囲む必要があります。

tee f<<<'tee f<<<cat f'
cat f

引用符が出力されないことを除いて、ほとんど機能します。幸いなことに、Bashは単純に文字列を隣り合わせに配置することで文字列リテラルの連結をサポートしているため"''"、ヒアストリングに追加し""て一重引用符部分に挿入すると、このソリューションが得られます。



1

CJam, 8 bytes

"2*`"2*`

Try it online!

Explanation

Similar to the Python example in the question

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

The output is "2*`2*`".


1

Befunge, 11 bytes

' 2+">:#,_@

Prints:

+2 '@_,#:>"

Explanation:

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

Yes. but so does ". What is the restriction on that exactly?
MegaTom

I don't think that " is considered reading ones own source, its just a string literal. g however is pretty blatantly reading its own source.
Wheat Wizard

@WheatWizard okay. I will change it.
MegaTom

":1+>:#,_@! also works but its not shorter.
Wheat Wizard

' 2+"8k,@ for 9 bytes
ovs

1

QBIC, 8 bytes

?A+@?A@+

I just figured out how to do a proper quine in QBIC. Making an anagram out of it is done by simply switching around the characters in the string literal. There are 24 possible anagrams this way.



1

Ohm, 14 bytes

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

Try it online!

Output:

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

Explanation

"æ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

Fission 2, 9 8 6 bytes

R"'!+O

Try it online!

Explanation

An atom is created at R, which moves right. This atom then comes across a ", which starts printing mode. In printing mode, all characters (until the matching ") are printed. This means it prints '!+OR in this case. Then, all that is left is printing ", which is done by the remaining characters. '! sets the atom's mass to the character code of !, and + increments it to the character code of ". Then, the character code is output by O and the atom is destroyed, ending the program.

(Actually, this is just a rotation of the shortest quine)


I believe you can just use the standard quine and shift it cyclically (so something like R"'!+O, untested).
Martin Ender

@MartinEnder: you're right. Updated. Thanks for helping.
Luke

1

Mathematica, 2 bytes

.0

Output:

0.

A number starting with a decimal point such as .123 is interpreted as 0.123, so .0 is interpreted as 0.0. Since the part of the number after the decimal point is zero, Mathematica does not print it.


1
I don't think this is valid. Our site definition requires that quines have an "encoder" and a "decoder", this bans literal only type quines.
Wheat Wizard

All the rules for quines carry over to this challenge.
Wheat Wizard

@WheatWizard: The . encodes itself, but I don't think the 0 does? A 0 beyond the decimal point can't sanely be seen as encoding a leading zero before the decimal point, the latter's a side effect of printing a float. So under the old quine rules, there's no problem here. (I'm not sure whether the new rules have come into force yet.)

@ais523 I don't know. Perhaps this should be addressed by a meta question.
Wheat Wizard



1

Stax, 8 4 bytes

.S.S

Run and debug online!

A direct port of this answer.

Old version, 8 bytes

..b..LbL

Run and debug online!

Alternative version with a pretty cheap trick that can be applied to proper quines in almost any language.

"43bL"34bL

Run and debug online!

Because "34bL"34bL is a proper quine in Stax.

Yet another version, using only single-char string literals.

''c'Lc'cccLcLL

Run and debug online!

Explanation

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

"34çJ∞"34çJ∞

Outputs:

34çJ∞""∞Jç43

Try it online!

"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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.