Golf anagram Quine


24

W tym pytaniu poprosiłem cię o odgadnięcie quinu anagramowego na podstawie jego wyników. Wygląda jednak na to, że nie mamy jeszcze pytania, aby zagrać w golfa na anagramie. Twoim zadaniem będzie stworzenie możliwie najkrótszego quine'a z anagramami.

Co to jest anagram quine?

Anagram quine to niepusty program, który drukuje anagram swojego kodu źródłowego, inny niż oryginalne źródło.

Oto przykład quinu anagramowego w Pythonie 2:

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

Nie powinieneś czytać własnego źródła tego wyzwania.


2
@LeakyNun Nie, to nie może być quine.
Kreator pszenicy

2
Czy kod wyjściowy musi być poprawnym programem?
MD XF

1
@MDXF Nie, nie ma.
Wheat Wizard

2
@Okx Powinien być zgodny z naszymi standardowymi wymaganiami dla quine (inne niż quine).
Wheat Wizard

1
@LeakyNun Pamiętaj, nie sądzę, że programy 0-bajtowe mają anagramy, które różnią się od oryginału!
Neil

Odpowiedzi:


29

Pyth , 2 bajty

)(

Wyjścia

()

Wypróbuj online!

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

3
Czy to oznacza, że ()odkryłeś, że jest to quine znacznie krótszy niż dobrze znany jN*2]"jN*2] ?
Jim

1
@Jim nie, ponieważ nie jest to przystosowane do obciążenia: c
Rod

9

V , 4 bajty

2ii2

Wyjścia:

i2i2

Wypróbuj online!


2x wkładka i2?
CalculatorFeline

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

Ach, rozumiem, myślałem, że to Vim.
Wheat Wizard

@WheatWizard Nie, to jest trywialna modyfikacja standardowej litery V.
Riley

1
@isaacg: nie, w Vimie będziesz musiał nacisnąć ESC po zakończeniu, co jest problemem, ponieważ nie ma znaku ESC w wyniku.

9

> <> , 9 8 7 bajtów

Grał w golfa 1 bajt dzięki @WheatWizard za pomocą ! i zwiększając go, aby uzyskać"

Grał w golfa 1 bajt dzięki @ ConorO'Brien, używając #zamiast<!

":1->o#

Wypróbuj online!

Wyjścia "#o>-1: .

Wyjaśnienie

":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<!jest nieco krótszy.
Wheat Wizard

@WheatWizard Dzięki, to był fajny golf :)
Kritixi Lithos

1
Możesz dostać 7 bajtów:":1->o#
Conor O'Brien

@ ConorO'Brien Dzięki za wskazówkę, która jest naprawdę sprytna.
Kritixi Lithos

Dzięki :) Jestem mile zaskoczony, że działa tutaj lepiej niż w prawdziwym quine
Conor O'Brien

9

Brainfuck, 158 bajtów

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

Wypróbuj online!

To może nie być najkrótsza wersja, ale przynajmniej działa.

Ciekawostką jest , że kod wyjściowy może być faktycznie wykonany (i się kończy).

Wydajność

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

Wyjaśnienie

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

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


7

Rubinowy , 8 bajtów

p"p*2"*2

Wypróbuj online!

To drukuje

"p*2p*2"

Wyjaśnienie

Działa to podobnie do odpowiedzi na python w pytaniu. Spowoduje to utworzenie ciągu, p*2p*2a następnie użycie ruby pwydrukuje reprezentację ciągu.


Możesz użyć pzamiast puts?! Tyle zmarnowanego czasu ...
Magic Octopus Urn

4
@carusocomputing To nie jest dokładnie to samo, co stawia. p xjest równoważne zputs x.inspect
Conor O'Brien

6

JavaScript (ES6), 40 32 bajtów

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

Nie ma też problemu z Function.toString. Jako bonus, kod wewnątrz łańcucha wygląda prawie legalnie. Edycja: Zapisano 8 bajtów, używając +zamiast repeat(2).


1
Dlaczego nie użyć *2zamiast .repeat(2), czy to nie działa?
Magic Octopus Urn

1
@carusocomputing JavaScript nie przeciąża *ciągów znaków
Conor O'Brien

1
@carusocomputing To dało mi pomysł, dzięki!
Neil


4

Japt , 10 9 bajtów

Znalazłem lepszy sposób :-)

Q+2ç"Q+2ç

Wyjścia "Q+2çQ+2ç. Przetestuj online!

Wyjaśnienie

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

Mógłby też być Qi2ç"Qi2ç, który drukuje Qi2çQi2ç". Ten jest bliższy standardowemu Quine Japt:

"iQ ²"iQ ²

Ale nie wierzę, że istnieje jakikolwiek prosty sposób na zaklinowanie cudzysłowu na środku ciągu 9-bajtowego quine.


Kolejny 10-bajter:Q+"+Q² " ²
Conor O'Brien

@ ConorO'Brien Tak, i zawsze możesz ustawić 4 znaki w ciągu w każdej z 24 możliwych kombinacji. Wierzę też, że zawsze możesz zastąpić oba spacje nowymi
liniami

3

Ruby, 20 bajtów

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

To wychodzi

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

Wykorzystanie %q(...)składni napisów Ruby , która obsługuje zagnieżdżone nawiasy.


3

Siatkówka , 8 bajtów


_

$nn$

Wypróbuj online!

Wydruki


n$_
n$

Oba zawierają jeden _, dwa n, dwa$ i trzy kanały.

Zauważ, że wysuw wiersza, po którym następuje prawie jakikolwiek inny znak, jest trywialnym rozwiązaniem, ale wątpliwe jest, czy jest poprawny, ponieważ drugi znak tylko koduje się sam, a wysuw wiersza tak naprawdę nie koduje żadnego znaku wyjściowego.

Wyjaśnienie


_

Zamień puste dane wejściowe na _.


$nn$

Dopasuj pusty ciąg, który dzieje się zarówno przed, jak i po, _i wstaw linefeed ( $n), an ni a $. Odkąd po raz pierwszy to wstawiliśmy _, dodaje to każdy z tych znaków dwa razy, więc ni $uwzględniają$n i otrzymujemy dwa z trzech kanałów, których potrzebujemy w danych wyjściowych. Trzecie podawanie linii jest drukowane, ponieważ Retina domyślnie drukuje końcowe podawanie linii.

Na n$n$tym etapie moglibyśmy również użyć , aby wydrukować:

n
$_n
$


3

Python Repl, 4 bajty

To moje pierwsze rozwiązanie Code Golf, więc mam nadzieję, że będzie zgodne z zasadami. W interaktywnym tłumaczu Python 2 lub 3:

>>> (1),
(1,)

Dane wyjściowe są anagramem danych wejściowych.


Inne:

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

W Python 2:

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

W Python 3:

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

Aktualizacja 2017-06-15: Jeszcze jedno:

>>> 01.
1.0

1
Myślę, że ostatnia odpowiedź tutaj narusza zasady quine (wszystkie znaki na wyjściu służą temu samemu celowi, co pasujący znak na wejściu). Jednak inni mają się dobrze.

2

Haskell , 38 39 bajtów

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

Wypróbuj online! Wydajność:

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

Edycja: bajt +1, ponieważ wcześniej zapomniałem o niejawnej końcowej linii nowego print.


Alternatywnie: (ta sama liczba bajtów, ale nie zawiera ASCII-owl)

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

Wypróbuj online!

Wydajność:

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

Tylko ledwie anagramowy quine, a nie prawdziwy quine ....
Feathercrown,

2

Groovy, 24 20 bajtów

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

-4 dzięki Kalkulatorowi, białe znaki nie były wcale potrzebne!

Wydajność:

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

Wyjaśnienie:

Anonimowe zamknięcie, które po wywołaniu zwraca {""*""2""}dwa razy (konkatenowane).


1
Proszę o wyjaśnienie. Ponadto bajty można (prawdopodobnie) zapisać, używając *2jako dopełniania między cudzysłowami:{"""{""*""2""}"""*2}
CalculatorFeline

@CalculatorFeline to dość oczywiste. Ale tak, to <s> 100% </s> 9% lepszy pomysł niż mój.
Magic Octopus Urn

3
W rzeczywistości jest tylko o 9% lepszy: P
CalculatorFeline

2

05AB1E , 10 bajtów

'∞∞''∞'JJ∞

Wypróbuj online!

Wydajność:

∞∞''JJ''∞∞

Wyjaśnienie:

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 bajtów

"_`"_`

Wypróbuj online!

Wydruki

_`"_`"

Wyjaśnienie

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

Już miałem to opublikować ... ”„ _ ”_` również działa
Luis Mendo

1

Bash, 36 bajtów

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

To wychodzi

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

(i tworzy plik fjako efekt uboczny, ale jest to dozwolone na meta .)

Zarówno program, jak i wynik mają końcowy znak nowej linii.

Proces myślowy: doszedłem do wniosku, że najprostszym sposobem na dwukrotne wyprowadzenie ciągu, oprócz przypisania go do zmiennej, było zrobienie

tee f<<<string
cat f

Ciąg musi być cytowany, ponieważ będzie zawierał spacje i <znaki, więc miałem

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

co prawie działa, z wyjątkiem tego, że nie wyświetla cudzysłowów. Na szczęście Bash obsługuje dosłowne łączenie łańcuchów znaków, po prostu umieszczając je obok siebie, więc dołączenie "''"do tustringu i wstawienie ""do części pojedynczego cytatu daje to rozwiązanie.



1

CJam , 8 bajtów

"2*`"2*`

Wypróbuj online!

Wyjaśnienie

Podobne do przykładu Python w pytaniu

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

Dane wyjściowe to "2*`2*`".


1

Befunge, 11 bajtów

' 2+">:#,_@

Wydruki:

+2 '@_,#:>"

Wyjaśnienie:

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

Tak. ale tak też jest ". Jakie jest dokładnie to ograniczenie?
MegaTom

Nie sądzę, że "uważa się to za czytanie własnego źródła, to po prostu dosłowny ciąg znaków. gjednak rażąco czyta własne źródło.
Wheat Wizard

@WheatWizard w porządku. Zmienię to.
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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.