아나그램 퀸 골프


24

에서 이 질문에 나는 그것의 출력을 기반으로 철자 바꾸기 quine를 추측 할 수 물었다. 그러나 아직 아나그램 퀴인을 골프로 칠 것을 요구하는 질문이없는 것 같습니다. 그래서 당신의 임무는 당신이 할 수있는 가장 짧은 아나그램 퀴니를 만드는 것입니다.

아나그램 퀘인은 무엇입니까?

anagram quine은 원본이 아닌 소스 코드의 anagram을 인쇄하는 비어 있지 않은 프로그램입니다.

다음은 Python 2의 아나그램 퀴네 예제입니다.

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

이 도전에 대한 자신의 소스를 읽을 수 없습니다.


2
@LeakyNun 아니오, 그것은 엉망이 될 수 없습니다 .
밀 마법사

2
출력 된 코드는 유효한 프로그램이어야합니까?
MD XF

1
@MDXF 아니요.
밀 마법사

2
@Okx 퀴인에 대한 표준 요구 사항을 준수해야합니다 (퀴인 이외).
밀 마법사

1
@LeakyNun 0 바이트 프로그램에는 원본과 다른 아나그램이 있다고 생각하지 않습니다!
Neil

답변:



9

V , 4 바이트

2ii2

출력 :

i2i2

온라인으로 사용해보십시오!


2 배속 삽입 i2?
CalculatorFeline

1
네. 2 -> do the next thing twice i -> insert the following
Riley

아, 나는 이것이 Vim이라고 생각했다.
밀 마법사

@WheatWizard Nope, 이것은 표준 V quine의 사소한 수정입니다.
Riley

1
@isaacg : 아니오, Vim에서는 일단 완료되면 ESC를 눌러야합니다. 출력에 ESC 문자가 없기 때문에 문제가됩니다.

9

> <> , 9 8 7 바이트

@WheatWizard 덕분에 1 바이트를 사용 !하고 증가 시켜 골프를 쳤 습니다."

@ ConorO'Brien #대신 1 바이트를 사용하여 골프를 쳤습니다.<!

":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#
Conor O'Brien

@ ConorO'Brien 팁 주셔서 감사합니다. 정말 영리합니다.
Kritixi Lithos 2016 년

감사합니다 :) 나는 그것이 실제 quine
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

파이썬 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"

설명

이것은 질문의 파이썬 답변과 유사하게 작동합니다. 문자열을 p*2p*2만든 다음 Ruby를 사용하여 문자열 p표현을 인쇄합니다.


? p대신에 사용할 수 있습니다 puts! 너무 많은 시간 낭비 ...
Magic Octopus Urn

4
@carusocomputing 그것은 정확히 같은 것과 다릅니다. p x에 해당합니다puts x.inspect
코너 오브라이언

6

자바 스크립트 (ES6), 40 32 바이트

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

Function.toString도 엉망이 아닙니다. 보너스로 문자열 내부의 코드는 거의 합법적입니다. 편집 : +대신 8 바이트를 사용하여 저장했습니다 repeat(2).


1
*2대신에 사용 하지 않는 이유는 무엇 .repeat(2)입니까?
매직 문어 Urn

1
@carusocomputing JavaScript는 *문자열에 과부하가 걸리지 않습니다
Conor O'Brien

1
@carusocomputing 감사합니다!
Neil


4

Japt , 10 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 바이트 퀴 (wine)로 묶는 쉬운 방법이 없다고 생각합니다.


또 다른 10 바이 터 :Q+"+Q² " ²
Conor O'Brien

@ ConorO'Brien Yep, 24 개의 가능한 순열 각각에서 문자열 안에 4 개의 문자를 정렬 할 수 있습니다. 또한 두 공간을 항상 줄 바꿈으로 바꿀 수 있다고 생각합니다.
ETHproductions

3

루비, 20 바이트

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

이 출력

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

%q(...)중첩 괄호를 지원하는 Ruby의 문자열 구문 을 활용 합니다.


3

망막 , 8 바이트


_

$nn$

온라인으로 사용해보십시오!

인쇄물


n$_
n$

둘 다 하나 _, 둘 n, 둘 포함$ 및 세 개의 줄 바꿈을 포함합니다.

거의 다른 문자가 뒤에 오는 줄 바꿈은 사소한 해결책이지만 두 번째 문자 만 인코딩하고 줄 바꿈이 실제로 두 출력 문자를 인코딩하지 않기 때문에 그것이 유효한지 여부는 의문의 여지가 있습니다.

설명


_

빈 입력을로 바꿉니다 _.


$nn$

빈 문자열을 일치시킵니다. 이는 전후에 발생 _하며 줄 바꿈 ( $n), a 및 a를 삽입 n합니다 $. 우리가 먼저 삽입하기 때문에 _소위,이 두 번 그 문자의 각을 추가 n하고 $에 대한 계정 $n, 우리는 우리가 출력에 필요한 세 줄 바꿈 두 얻을. Retina는 기본적으로 후행 줄 바꿈을 인쇄하기 때문에 세 번째 줄 바꿈이 인쇄됩니다.

n$n$이 단계 에서도 사용할 수 있으며 다음과 같이 인쇄됩니다.

n
$_n
$


3

Python Repl, 4 바이트

이것이 첫 번째 코드 골프 솔루션이므로 규칙을 준수하기를 바랍니다. Python 2 또는 3 대화식 인터프리터에서 :

>>> (1),
(1,)

출력은 입력의 아나그램입니다.


다른:

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

파이썬 2에서 :

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

파이썬 3에서 :

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

2017-06-15 업데이트 : 또 다른 :

>>> 01.
1.0

1
여기의 마지막 대답은 quine 규칙을 위반한다고 생각합니다 (출력의 모든 문자는 입력의 일치하는 문자와 동일한 목적을 제공합니다). 그래도 다른 사람들은 괜찮습니다.

2

하스켈 , 38 39 바이트

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

온라인으로 사용해보십시오! 산출:

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

편집 : +1 바이트 이전에 암시 적 후행 줄 바꿈을 잊었 기 때문에 +1 바이트 print.


대안 : (같은 바이트 수이지만 ASCII-owl을 포함하지 않음)

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

온라인으로 사용해보십시오!

산출:

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

진정한 quine보다는 단지 아나그램 quine ....
Feathercrown

2

그루비, 24 20 바이트

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

CalculatorFeline 덕분에 -4 덕분에 공백이 필요하지 않았습니다!

산출:

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

설명:

호출 될 때 {""*""2""}두 번 (연결된) 익명 클로저입니다 .


1
설명 해주세요 또한 *2따옴표 사이에 as 패딩 을 사용하여 바이트를 저장할 수 있습니다 .{"""{""*""2""}"""*2}
CalculatorFeline

@CalculatorFeline 그것은 꽤 자명하다. 그러나 그렇습니다. 저의 것보다 <s> 100 % </ s> 9 % 더 좋습니다.
매직 문어 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''∞∞


1

배쉬, 36 바이트

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

이 출력

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

(그리고 f부작용으로 파일 을 생성 하지만 허용됩니다. 메타 당 됩니다..)

프로그램과 출력 모두 줄 바꿈 줄이 있습니다.

생각 과정 : 문자열을 변수에 할당하는 것 외에도 문자열을 두 번 출력하는 가장 쉬운 방법은 수행하는 것이라고 생각했습니다.

tee f<<<string
cat f

문자열에는 공백과 <문자 가 포함되므로 따옴표로 묶어야하므로

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

which almost works, except it doesn't output the quotes. Fortunately, Bash supports string literal concatenation by simply placing them next to each other, so appending "''" to the herestring and inserting "" inside the single quote part yields this solution.



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.