Odwróć Quine!

11

Wszyscy wiemy, co to jest quine . Odwrócony Quine jest niepusty program, który drukuje odwrotnością jego kodu źródłowego bez czytania jego kod źródłowy i składa się wyłącznie ze znaków ASCII druku (poprzez przestrzeń ~).

W tym przypadku „odwrotność kodu źródłowego” oznacza, co następuje: wynik programu musi zawierać każdy drukowalny znak ASCII (m - c) razy, gdzie c jest liczbą wystąpień tego znaku w kodzie, a m jest maksymalnym liczba powtórzeń dowolnego znaku w kodzie.

(Innymi słowy: twój kod + twój wynik = permutacja m razy wszystkich drukowalnych ASCII.)

Na przykład, jeśli twój program to 12345, to m = 1 i powinieneś wypisać dowolną permutację tego ciągu:

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

Jeśli twój program to AAB, to m = 2 i powinieneś wypisać dowolną permutację:

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

Zwróć uwagę, że brakuje dwóch As, a jednego brakuje B.

Chociaż program, który zawiera wszystkie drukowalne znaki ASCII i niczego nie wypisuje, jest prawidłową odwrotną quine (spełniającą m = 1 ), taka odpowiedź nie byłaby zbyt konkurencyjna, biorąc pod uwagę jej długość.

Masz napisać program, który jest odwrócony quine, jak opisano w powyższym akapicie. Ponieważ jest to , wygra najkrótszy program w bajtach. Powodzenia!

Gryf
źródło
1
Spacja, tabulator i nowa linia?
Stewie Griffin
11
Powinieneś podkreślić, że duplicated for every repeated character in the source codeto robi różnicę w wyzwaniu
Rod
6
Czy możesz podać przykład odwrotności, w której wiele znaków jest powtarzanych (i wiele razy)? Powiedzmy 11234512345?
Giuseppe
4
Jak to jest duplikat? Powiązane tak. Duplikat, nie! Jest to droga trudniejsza w językach, gdzie trzeba mieć zduplikowane znaków. Zauważ, że nie możesz po prostu powielić łańcucha, ponieważ liczba znaków, które musisz usunąć z każdego łańcucha jest różna.
Stewie Griffin
1
@StewieGriffin Chciałbym VTC to jako „niejasne”, a nie jako „dupe”, ponieważ (prawie) każda odpowiedź ma komentarz próbujący dowiedzieć się, co duplicated for every repeated character in the source codeoznacza lub czy przesłanie jest ważne dla tego kryterium, ponieważ PO nie rozwiązał dość kilka pytań tutaj.
Giuseppe,

Odpowiedzi:

7

Brain-Flak , 221 207 bajtów

Obejmuje +1 dla -A

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

Wypróbuj online!

# 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
 >)}{}
Riley
źródło
Myślę, że powinieneś usunąć tylko [pięć razy, a nie za każdym razem. Uwaga: 2w tym przykładzie jest usuwany tylko raz. Wyzwanie jest jednak nieco mylące.
Stewie Griffin
Ciekawe, jak drastycznie jest on krótszy niż standardowy quine. +1:)
James
2
To jest naprawdę kiepskie i znacznie mniej interesujące niż twoja odpowiedź, ale technicznie !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz {|} ~ ` uzyskałby lepszy wynik: /
James
6

CJam , 17 bajtów

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

Wypróbuj online!

Wydruki

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

Wyjaśnienie

Celem była modyfikacja standardowego quine

{"_~"}_~

tak, że żaden znak nie jest powtarzany w programie. Powodem tego jest to, że CJam ma ustawiony inny operator, którego możemy użyć do usunięcia znaków z drukowalnego zakresu ASCII, ale nie bierze pod uwagę liczby wystąpień. Ręczne wdrożenie tego byłoby prawdopodobnie dłuższe, więc musiałem się upewnić, że każda postać pojawi się tylko raz i nie będziemy musieli martwić się o zdarzenia.

{      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.
}_~
Martin Ender
źródło
2

05AB1E , 95 61 60 bajtów (nie 58 b / c Nie lubię tego)

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

Wypróbuj online!

Stara odpowiedź unieważniona przez „tylko znaki ASCII”, wiele poleceń tutaj nie jest poprawnych.

Drukuje się abcdefghijklmnopqrstuvwxyz012345678jeden raz, ponieważ nie ma zduplikowanych znaków.


Wersja z BCDEFGHIKMNOPQRSTUVWXYZusuniętymi:

Praca w toku ... Myślę, że ~ 60 bajtów jest tak niskie, jak to możliwe bez znaków spoza ASCII w 05AB1E ..

05AB1E , 58 bajtów

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

Wypróbuj online!

Drukuje wynik x12 z powodu powtarzających się znaków:

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

Również nie kończy się całkiem poprawnie, pracując nad tym teraz ...


Nieprawidłowe stare odpowiedzi (z powodu znaków spoza ASCII) zostały usunięte, zobacz historię edycji.

Urna Magicznej Ośmiornicy
źródło
„Odwrócony quine jest niepustym programem, który drukuje odwrotność swojego kodu źródłowego bez odczytywania kodu źródłowego i składa się wyłącznie ze znaków ascii do wydrukowania ”. Pracowałem też nad odpowiedzią 05AB1E, dopóki tego nie zauważyłem.
KSmarts
1
@KSmarts naprawiono na 76 bajtów.
Magic Octopus Urn
2
Zazwyczaj w przypadku gry w golfa kodowego można by oczekiwać, że 05AB1E będzie trochę lepiej niż „bije Javę”.
KSmarts
@KSmarts wzrusza ramionami, jeśli nie pozwalasz esolangom łatwo konkurować z definicji, zasługujesz na sarkastyczną odpowiedź esolang: P.
Magic Octopus Urn
0

Java 8, 106 99 190 bajtów

class i {/*{}!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`claibdefghjkmnopqrtuvwxyz|~*/}
Roberto Graham
źródło
Prawdopodobnie możesz i {
zagrać w
1
Uważam, że każda postać musi występować tyle samo razy, aby było to ważne
Roberto Graham
Nie jestem pewien, czy rozumiem wyzwanie całkowicie, ale czy to nie class i{/*!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~*/}wystarczy? Zawiera cały kod ASCII do wydruku w kodzie źródłowym i nic nie wyświetla. Część „ duplikowane dla każdego powtarzanego znaku w kodzie źródłowym ” odnosi się do wyjścia, więc chociaż sjest powielany w classi *a /są duplikowane powodu /* */, wyprowadzanie czterokrotnie nic nie jest jeszcze nic.
Kevin Cruijssen
Ponadto, jeśli mam rację, możesz także interface Z{}//!"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`bdghjklmopqsuvwxyz|~
zagrać w
0

JavaScript (ES6), 103 101 bajtów

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

Stare rozwiązanie (przy użyciu 103 bajtów alert)

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

Stare (nieprawidłowe) rozwiązanie (96 bajtów)

alert()// !"#$%&'*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdfghijkmnopqsuvwxyz{|}~
Herman L.
źródło
Masz dwa //, co oznacza, że ​​musisz wydrukować znaki do wydrukowania, z jednym /usuniętym. (Myślę)
Stewie Griffin
@StewieGriffin Naprawiono
Herman L