Quine umkehren!

11

Wir alle wissen, was eine Quine ist. Ein invertiertes Quine ist ein nicht leeres Programm, das die Umkehrung seines Quellcodes druckt, ohne seinen Quellcode zu lesen. Es besteht ausschließlich aus druckbaren ASCII-Zeichen (Leerzeichen durch ~).

Hier bedeutet "Inverse des Quellcodes" Folgendes: Die Ausgabe Ihres Programms muss jedes druckbare ASCII-Zeichen (m - c) mal enthalten, wobei c die Häufigkeit ist, mit der das Zeichen in Ihrem Code vorkommt, und m das Maximum ist Häufigkeit, mit der ein Zeichen in Ihrem Code wiederholt wird.

(Mit anderen Worten: Ihr Code + Ihre Ausgabe = Permutation von m mal allen druckbaren ASCII.)

Zum Beispiel, wenn Ihr Programm ist 12345, dann m = 1 , und Sie ausgeben sollte jede Permutation dieser Zeichenfolge:

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

Wenn Ihr Programm ist AAB, dann ist m = 2 , und Sie sollten eine beliebige Permutation von:

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

Beachten Sie, wie zwei Aund eines fehlen B.

Obwohl ein Programm, das alle druckbaren ASCII-Zeichen enthält und nichts ausgibt, eine gültige inverse Quine ist (die m = 1 erfüllt ), wäre eine solche Antwort angesichts ihrer Länge nicht sehr wettbewerbsfähig.

Sie müssen ein Programm schreiben, das eine invertierte Quine ist, wie im obigen Absatz beschrieben. Da dies , gewinnt das kürzeste Programm in Bytes. Viel Glück!

Greif
quelle
1
Leerzeichen, Tabulator und Zeilenumbruch?
Stewie Griffin
11
Sie sollten hervorheben, dass duplicated for every repeated character in the source codees den Unterschied in der Herausforderung ausmacht
Rod
6
Können Sie ein Beispiel für die Umkehrung geben, bei der mehrere Zeichen (und mehrere Male) wiederholt werden? Sagen Sie 11234512345?
Giuseppe
4
Wie ist das ein Duplikat? Verwandte, ja. Duplizieren, nein! Es ist Art und Weise schwieriger in Sprachen , in denen Sie doppelte Zeichen haben müssen. Beachten Sie, dass Sie auch nicht nur eine Zeichenfolge duplizieren können, da die Anzahl der Zeichen, die Sie aus jeder Zeichenfolge entfernen müssen, unterschiedlich ist.
Stewie Griffin
1
@StewieGriffin Ich würde dies als "unklar" und nicht als "betrogen" bezeichnen, da (fast) jede Antwort einen Kommentar enthält, der versucht herauszufinden, was duplicated for every repeated character in the source codebedeutet oder ob die Einreichung für dieses Kriterium gültig ist, da das OP nicht ganz auf ein Problem eingegangen ist Einige der Fragen hier.
Giuseppe

Antworten:

7

Brain-Flak , 221 207 Bytes

Beinhaltet +1 für -A

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

Probieren Sie es online aus!

# 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
quelle
Ich denke, Sie sollten nur [fünf Mal entfernen , nicht alle Male. Beachten Sie, dass dies 2im Beispiel nur einmal entfernt wird. Die Herausforderung ist allerdings etwas verwirrend.
Stewie Griffin
Interessant, wie drastisch kürzer das Standardquine ist. +1:)
James
2
Dies ist wirklich lahm und deutlich weniger interessant als Ihre Antwort, aber technisch gesehen würde !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz {|} ~ ` eine bessere Punktzahl erzielen: /
James
6

CJam , 17 Bytes

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

Probieren Sie es online aus!

Druckt

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

Erläuterung

Ziel war es, die Standard-Quine zu modifizieren

{"_~"}_~

so dass kein Zeichen im Programm wiederholt wird. Der Grund dafür ist, dass CJam einen anderen Operator festgelegt hat, mit dem wir Zeichen aus dem druckbaren ASCII-Bereich entfernen können, der jedoch die Anzahl der Vorkommen nicht berücksichtigt. Die manuelle Implementierung wäre wahrscheinlich länger, daher musste ich sicherstellen, dass jedes Zeichen nur einmal erscheint und wir uns keine Sorgen über das Auftreten machen müssen.

{      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
quelle
2

05AB1E , 95 61 60 Bytes (nicht 58 b / c Ich mag das nicht)

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

Probieren Sie es online aus!

Alte Antwort durch "Nur-ASCII-Zeichen" ungültig gemacht, viele Befehle sind hier nicht gültig.

Es wird einmal gedruckt, abcdefghijklmnopqrstuvwxyz012345678da keine doppelten Zeichen vorhanden sind.


Version mit BCDEFGHIKMNOPQRSTUVWXYZentfernt:

In Arbeit ... Ich denke, ~ 60 Bytes sind so niedrig, wie Sie es ohne Nicht-ASCII-Zeichen in 05AB1E bekommen.

05AB1E , 58 Bytes

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

Probieren Sie es online aus!

Druckt die Ausgabe x12 aufgrund der wiederholten Zeichen:

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

Es endet auch nicht ganz richtig und arbeitet jetzt daran ...


Ungültige alte Antworten (aufgrund von Nicht-ASCII-Zeichen) wurden entfernt, siehe Bearbeitungsverlauf.

Magische Krakenurne
quelle
"Ein invertiertes Quine ist ein nicht leeres Programm, das die Umkehrung seines Quellcodes druckt, ohne seinen Quellcode zu lesen. Es besteht ausschließlich aus druckbaren ASCII-Zeichen ." Ich habe auch an einer 05AB1E-Antwort gearbeitet, bis ich das bemerkte.
KSmarts
1
@KSmarts zu einem Preis von 76 Bytes behoben.
Magic Octopus Urn
2
Normalerweise würde man bei einer Code-Golf-Herausforderung erwarten, dass 05AB1E etwas besser abschneidet als "schlägt Java".
KSmarts
@KSmarts Achselzucken Wenn Sie nicht zulassen, dass Esolangs per Definition leicht miteinander konkurrieren, verdienen Sie eine sarkastische Esolang-Antwort: P.
Magic Octopus Urn
0

Java 8, 106 99 190 Bytes

class i {/*{}!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`claibdefghjkmnopqrtuvwxyz|~*/}
Roberto Graham
quelle
Sie können es wahrscheinlich Golf spielen, indem Sie den Platz entfernen, i {da Sie bereits einen Platz haben
Okx
1
Ich glaube, dass jeder Charakter gleich oft vorkommen muss, damit dies gültig ist
Roberto Graham
Ich bin mir nicht sicher, ob ich die Herausforderung vollständig verstehe, aber reicht das nicht class i{/*!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~*/}aus? Es enthält alle druckbaren ASCII-Dateien im Quellcode und gibt nichts aus. Der Teil „ für jedes wiederholtes Zeichen im Quellcode dupliziert gilt allerdings mit dem Ausgang“ , so auch sin dupliziert classund *und /sind aufgrund dupliziert /* */, Ausgeben viermal nichts nichts ist nach wie vor.
Kevin Cruijssen
Wenn ich in der Tat richtig bin, können Sie es auch spielen, um: interface Z{}//!"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`bdghjklmopqsuvwxyz|~( 97 Bytes )
Kevin Cruijssen
0

Javascript (ES6), 103 101 Bytes

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

Alte Lösung (103 Bytes mit alert)

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

Alte (ungültige) Lösung (96 Bytes)

alert()// !"#$%&'*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdfghijkmnopqsuvwxyz{|}~
Herman L.
quelle
Sie haben zwei //, dh Sie müssen die druckbaren Zeichen ausgeben, wobei eines /entfernt wird. (Ich denke)
Stewie Griffin
@StewieGriffin behoben
Herman L