Inversez un quine!

11

Nous savons tous ce qu'est un quine . Un quine inversé est un programme non vide qui imprime l'inverse de son code source sans lire son code source, et se compose uniquement de caractères ASCII imprimables (espace à travers ~).

Ici, «inverse du code source» signifie ce qui suit: la sortie de votre programme doit contenir chaque caractère ASCII imprimable (m - c) fois, où c est le nombre de fois que ce caractère apparaît dans votre code, et m est le maximum nombre de fois qu'un caractère est répété dans votre code.

(En d'autres termes: votre code + votre sortie = permutation de m fois tout en ASCII imprimable.)

Par exemple, si votre programme est 12345, alors m = 1 , et vous devez sortir toute permutation de cette chaîne:

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

Si votre programme est AAB, alors m = 2 , et vous devez sortir toute permutation de:

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

Notez qu'il y a deux As manquants et un manquant B.

Bien qu'un programme qui contient tous les caractères ASCII imprimables et ne produise rien ne soit un quine inverse valide (satisfaisant m = 1 ), une telle réponse ne serait pas très compétitive, étant donné sa longueur.

Vous devez écrire un programme qui est un quine inversé, comme décrit dans le paragraphe ci-dessus. Comme il s'agit de , le programme le plus court en octets gagnera. Bonne chance!

Gryphon
la source
1
Espace, tabulation et nouvelle ligne?
Stewie Griffin
11
Vous devriez souligner que duplicated for every repeated character in the source codecela fait toute la différence dans le défi
Rod
6
Pourriez-vous donner un exemple de l'inverse où plusieurs caractères sont répétés (et plusieurs fois)? Dis, 11234512345?
Giuseppe
4
Comment est-ce un doublon? Lié, oui. Dupliquer, non! C'est beaucoup plus difficile dans les langues où vous devez avoir des caractères en double. Notez que vous ne pouvez pas simplement dupliquer une chaîne non plus, car le nombre de caractères que vous devez supprimer de chaque chaîne varie.
Stewie Griffin
1
@StewieGriffin Je dirais que cela est "peu clair" plutôt que "dupe" parce que (presque) chaque réponse a un commentaire essayant de comprendre ce que duplicated for every repeated character in the source codesignifie ou si la soumission est valide pour ce critère, parce que le PO n'a pas abordé tout à fait un quelques-unes des questions ici.
Giuseppe

Réponses:

7

Brain-Flak , 221 207 octets

Comprend +1 pour -A

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

Essayez-le en ligne!

# 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
la source
Je pense que vous ne devriez supprimer que [cinq fois, pas toujours. Notez qu'il 2n'est supprimé qu'une seule fois dans l'exemple. Le défi est cependant un peu déroutant.
Stewie Griffin
Intéressant de voir comment cela est considérablement plus court que le quine standard. +1:)
James
2
C'est vraiment boiteux et beaucoup moins intéressant que votre réponse, mais techniquement, !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz {|} ~ ` obtiendrait un meilleur score: /
James
6

CJam , 17 octets

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

Essayez-le en ligne!

Impressions

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

Explication

Le but était de modifier le quine standard

{"_~"}_~

de sorte qu'aucun caractère ne soit répété dans le programme. La raison en est que CJam a un opérateur différent défini que nous pouvons utiliser pour supprimer des caractères de la plage ASCII imprimable, mais il ne prend pas en compte le nombre d'occurrences. L'implémentation manuelle serait probablement plus longue, donc je devais m'assurer que chaque personnage n'apparaît qu'une seule fois et nous n'avons pas à nous soucier des occurrences.

{      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
la source
2

05AB1E , 95 61 60 octets (pas 58 b / c je n'aime pas celui-là)

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

Essayez-le en ligne!

Ancienne réponse invalidée par des "caractères ASCII uniquement", de nombreuses commandes ne sont pas valides ici.

Il s'imprime abcdefghijklmnopqrstuvwxyz012345678une fois car il n'y a pas de caractères en double.


Version avec BCDEFGHIKMNOPQRSTUVWXYZsupprimé:

Travail en cours ... Je pense que ~ 60 octets est aussi bas que possible sans caractères non ASCII dans 05AB1E ..

05AB1E , 58 octets

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

Essayez-le en ligne!

Imprime la sortie x12 en raison des caractères répétés:

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

Il ne se termine pas non plus correctement, y travaillant maintenant ...


Les anciennes réponses non valides (en raison de caractères non ASCII) ont été supprimées, voir l'historique des modifications.

Urne de poulpe magique
la source
"Un quine inversé est un programme non vide qui imprime l'inverse de son code source sans lire son code source, et se compose uniquement de caractères ascii imprimables ." Je travaillais aussi sur une réponse 05AB1E, jusqu'à ce que je le remarque.
KSmarts
1
@KSmarts fixé à un coût de 76 octets.
Magic Octopus Urn
2
Typiquement, dans un défi de code-golf, on s'attendrait à ce que 05AB1E fasse un peu mieux que "bat Java".
KSmarts
@KSmarts hausse les épaules si vous ne laissez pas les esolangs rivaliser facilement par définition, vous méritez une réponse sarcastique d'esolang: P.
Urne de poulpe magique
0

Java 8, 106 99 190 octets

class i {/*{}!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`claibdefghjkmnopqrtuvwxyz|~*/}
Roberto Graham
la source
Vous pouvez probablement i {
jouer au
1
Je crois que chaque personnage doit se produire le même nombre de fois pour que cela soit valide
Roberto Graham
Je ne suis pas sûr de bien comprendre le défi, mais n'est-ce pas class i{/*!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~*/}suffisant? Il contient tous les ASCII imprimables dans son code source et ne produit rien. La partie " dupliquée pour chaque caractère répété dans le code source " s'applique à la sortie, donc même si elle sest dupliquée dans classet *et /est dupliquée en raison de /* */, la sortie quatre fois rien n'est toujours rien.
Kevin Cruijssen
De plus, si j'ai bien raison, vous pouvez également interface Z{}//!"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`bdghjklmopqsuvwxyz|~
jouer au
0

Javascript (ES6), 103 101 octets

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

Ancienne solution (103 octets en utilisant alert)

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

Ancienne solution (non valide) (96 octets)

alert()// !"#$%&'*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdfghijkmnopqsuvwxyz{|}~
Herman L
la source
Vous en avez deux //, ce qui signifie que vous devez imprimer les caractères imprimables, un /supprimé. (Je pense)
Stewie Griffin
@StewieGriffin Fixed
Herman L