Inverse-quotes-quine


29

La perspective de ce défi est:

  • Si votre programme est exécuté normalement, tout le code des marques vocales ( "- guillemets doubles) doit être imprimé.
  • Si votre programme est entouré de guillemets doubles (inversant à son tour les marques vocales), le code qui n'est normalement pas entre guillemets doit être imprimé.

Par exemple:

Disons que vous avez le code suivant:

fancyStuff("myCode"); "I like".isGreat();

Si je l'exécute, je m'attends à une sortie de:

myCode
I like

Cependant, si je le mettais entre guillemets, j'obtiendrais:

"fancyStuff("myCode"); "I like".isGreat();"

Lorsque ce code est exécuté, la sortie attendue serait:

fancyStuff(
); 
.isGreat();

De toute évidence, l'exemple ci-dessus n'est une réponse fonctionnelle dans aucune langue. Votre travail consiste à écrire le code qui fonctionne de cette façon.

Règles

  • Des échappatoires standard s'appliquent.
  • Les valeurs imprimées, sous forme entre guillemets et sans guillemets, doivent être non vides ou être constituées uniquement d'espaces. Cela signifie également que tous les programmes doivent inclure au moins un ensemble de guillemets.
  • Cependant, les espaces de fin / précédant sont autorisés.
  • Ne pas regarder votre propre code, les noms de fichiers requis, etc.
  • Les citations inégalées ne sont pas autorisées
  • S'il y a plusieurs chaînes, elles peuvent être imprimées en tant que nouvelles lignes (comme dans l'exemple), ou d'une autre manière lisible par l'homme - pas de tableaux ou d'objets
  • C'est le , donc la réponse la plus courte en octets l'emporte.

Les devis sans correspondance sont-ils autorisés et, dans l'affirmative, comment les traiter?
négatif sept

3
@GezaKerecsenyi Donc, un séparateur est-il nécessaire, ou pouvons-nous simplement concaténer les chaînes?
Erik the Outgolfer

9
Comment un tableau n'est -il pas un format lisible par l'homme?
Wheat Wizard

4
Les chaînes doivent-elles être sorties dans le même ordre qu'elles apparaissent dans notre code?
Shaggy

1
Je pense que cela aurait été un peu plus complexe si vous aviez dû imprimer tout ce qui n'était pas dans les citations
Jo King

Réponses:


28

Python 2 , 20 octets

print";print'print'"

-7 octets grâce à tsh

Essayez-le en ligne!


Ancienne réponse:

Python 2 , 27 octets

'';print";print 2*"'';print

Essayez-le en ligne!

Train de pensée derrière cette réponse:

Commencez par une impression simple, car nous devons imprimer quelque chose .

print"a"

Nous devons également imprimer quelque chose dans le cas inversé, c'est-à-dire. avoir une impression entre guillemets.

print"print"

Le cas non inversé est assez bon à ce stade. Concentrons-nous sur le cas inversé. Nous commençons maintenant avec la chaîne print, qui ne peut pas être suivie immédiatement par une instruction print. Corrigeons cela avec un point-virgule.

print";print"

Bon produit. Sauf que le code inversé n'affiche rien. Nous devrons imprimer le printau début, car il se termine par des guillemets, mais aussi imprimer tout ce qui vient après le deuxième devis, car il se termine également par des guillemets. Le moyen le plus évident consiste à ajouter printet à multiplier la dernière chaîne par 2.

print";print 2*"print

Maintenant, le code inversé fonctionne très bien, mais nous devons nous méfier du fait que la section avant la première citation et la section après la deuxième citation doivent être conservées de la même manière lors des modifications futures. Quant au code non inversé, il renvoie une erreur de syntaxe - encore une fois, nous devons introduire un point-virgule pour séparer les expressions.

;print";print 2*";print

Python n'aime pas vraiment l'apparence de ce point-virgule solitaire, nous devons donc satisfaire la faim du serpent avec deux expressions identiques, insérées avant le premier point-virgule et le dernier point-virgule. La plupart des expressions fonctionneront bien dans le premier cas, mais dans le second cas, elles doivent suivre print";print 2*"le code non inversé sans rien casser. Nous pouvons utiliser '', qui est simplement concaténé avec la chaîne précédente.

'';print";print 2*"'';print

5
print(";print('print()');")est également 27 octets, et aussi Python 3.
tsh

2
@tsh Ce code révèle une solution Python 2 de 20 octets qui aurait dû être évidente avec le recul, très agréable!
négatif sept

19

CSS, 66 octets

body:after{content:"{}body:after{content:'body:after{content:}'}"}

"body:after{content:"{}body:after{content:'body:after{content:}'}"}"

Pas tellement de questions peuvent être résolues par CSS ...


Semble que cela body:afterfonctionne également sur certaines implémentations?
Shieru Asakoto

@ShieruAsakoto Vous avez raison. :afterest disponible dans la plupart des navigateurs pour des raisons de compatibilité descendante
tsh

@Shaggy Mais il est difficile de définir comment "encapsuler votre code source avec des guillemets" fonctionne lorsque HTML et CSS sont fournis.
tsh

@tsh Ça va - je n'ai pas précisé à propos de plusieurs fichiers dans les règles, car je ne m'attendais pas à une réponse aussi unique!
Geza Kerecsenyi

10

HQ9 + [voir notes ci-dessous] , 1016 octets

"Bonjour le monde""""""""""""""""""""""""""""""""""""""""""""""" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""""""""""""Bonjour le monde"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""""""""""""""""""""""Bonjour le monde"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""""""""""""""""""""""Bonjour le monde"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""Bonjour le monde"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""Bonjour le monde"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""Bonjour le monde"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""Bonjour le monde"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""""""""""""Bonjour le monde"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""""""""""""Bonjour le monde"""""""""""""""""""""""""""""""""""Bonjour le monde"""""""""""""""""""""""""""""""""""Bonjour le monde

Utilisez l'implémentation sur https://esolangs.org/w/index.php?title=HQ9%2B&oldid=59995 et compilez l'interpréteur avec MinGW GCC 5.3.0 sous Windows. Je ne sais pas si cela fonctionne avec une autre version du compilateur, car un comportement indéfini de C est requis pour terminer le programme. Le tampon a une longueur de 1000 octets. Et le code source supérieur à 1000 octets fait l'affaire. Je ne sais pas comment cela s'est produit.


7
C'est peut-être la réponse HQ9 + la plus longue sur ce site. (?)
tsh

1
"un comportement indéfini de C est requis pour terminer le programme" Un comportement indéfini n'est pas défini : il peut tout faire.
Solomon Ucko

Selon la page 4 de la norme C18 : "Les comportements indéfinis possibles vont de l'ignorance complète de la situation avec des résultats imprévisibles, au comportement pendant la traduction ou l'exécution du programme d'une manière documentée caractéristique de l'environnement (avec ou sans émission d'un message de diagnostic ), de mettre fin à une traduction ou à une exécution (avec émission d'un message de diagnostic). "
Solomon Ucko

@SolomonUcko Mais nous définissons une langue par son compilateur / interprète sur ce site. Et la réponse est correcte tant qu’au moins un compilateur / interprète peut produire le résultat correct.
tsh

9

05AB1E , 4 octets

"A"§

Sorties concaténées sans séparateur.

Essayez-le en ligne ou essayez-le en ligne avec les citations environnantes .

Explication:

        # Program without surrounding quotes will output string "A"
"A"     # Push "A" to the stack
   §    # Cast it to a string
        # (output the top of the stack implicitly as result)

        # Program with surrounding quotes will output string "§"
""      # Push an empty string to the stack
  A     # Push the alphabet to the stack: "abcdefghijklmnopqrstuvwxyz"
   "§"  # Push "§" to the stack
        # (output the top of the stack implicitly as result)

Malheureusement, cela viole la règle n ° 2. Bien qu'il soit bien d'avoir des guillemets vides dans votre code, il doit y en avoir au moins un non vide sous des formes entourées et non entourées.
Geza Kerecsenyi

@GezaKerecsenyi Oups, lisez au-delà de la partie " sous des formes citées et non citées ". Devrait être corrigé maintenant.
Kevin Cruijssen

6

Japt , 4 octets

"P"s

Essayez non cotées ou cité

Pest la variable Japt pour la chaîne vide et la sméthode découpe une chaîne - sans aucun argument, elle ne fait rien.


Ou, un peu moins trivial:

"+"u

Essayez non cotées ou cité

Le premier majuscule +et le second s'ajoute uà une chaîne vide.


3
Notez que 4 est le score minimum pour cette question, car moins viole les restrictions.
Jo King

5

C # (Visual C # Interactive Compiler) , 113 112 107 70 64 octets

Write(".f();static void f(this string s){Write(s+')'+';');}//");

5 octets enregistrés grâce à @negative seven

Non cité et cité

Au bout d'un moment, j'ai réalisé que ma solution était trop compliquée. Le programme le plus récent montré ici cache simplement le reste du programme dans un commentaire pour éviter les erreurs lorsqu'il est placé entre guillemets.

Lorsqu'il est placé entre guillemets, il Write(est transmis à une méthode d'extension, qui l'imprime avec );.


Split()-> Trim(), et var a->_
négatif sept

1
@negativeseven Merci, je n'aurais jamais pensé utiliser une défausse!
Incarnation de l'ignorance

1
@negativeseven En fait, ma solution n'avait même pas besoin d'être aussi compliquée, regardez mon dernier montage
Embodiment of Ignorance

64 octets en utilisant une méthode d'extension. Assez surpris, cela a si bien fonctionné!
négatif sept

1
@negativeseven Merci! Et vous m'avez donné une idée pour la deuxième partie du défi: je capturais l'extérieur dans une variable, puis j'utilisais Removeet Insertdessus, maintenant je peux simplement utiliser une méthode d'extension!
Incarnation de l'ignorance

4

Perl 6 , 11 octets

say ".say~"

Essayez-le en ligne!

Imprime .say~avec une nouvelle ligne de fin. Semble trop facile. Suis-je en train de manquer quelque chose?

Lorsqu'il est entouré de guillemets , produit sayavec un espace et une nouvelle ligne de fin.


2
Je ne pense pas. C'est juste que p6 disons (ha) dire $ foo et $ foo.say ce qui le rend beaucoup plus facile.
user0721090601

4

Foo , 4 octets

"P"s

Essayez-le en ligne! Fonctionne également dans Japt.

5 octets (UTF-8)

"A"§

Essayez-le en ligne! Fonctionne également dans 05AB1E.

9 octets

"!""$;"$;

Essayez-le en ligne! Fonctionne également dans les enchantements runiques.

11 octets

say ".say~"

Essayez-le en ligne! Fonctionne également en Perl 6.

20 octets

print";print'print'"

Essayez-le en ligne! Fonctionne également en Python 2.

69 octets

body::after{content:"{}body::after{content:'body::after{content:}'}"}

Essayez-le en ligne! Fonctionne également en CSS.

Hmm ... Foo est un langage hautement adaptable.


" Hmm ... Foo est un langage hautement adaptable. " Pour ceux qui ne connaissent pas Foo: tout ce qui se trouve entre guillemets doubles est sorti et tout le reste (à l'exception de quelques autres caractères intégrés) est sans opération. " La langue parfaite pour le travail " est un euphémisme ici. ;)
Kevin Cruijssen

2
Donc, en gros, il suffit de voler toutes les autres solutions à ce défi?!
Shaggy

@Shaggy La langue est Foo. Presque tout avec au moins une paire de guillemets et les deux sorties non vides attendues fonctionnent dans Foo dans ce défi. Fonctionne "a"b 1"2"également dans Foo. La seule réponse dans ce défi qui n'est pas un polyglotte Foo jusqu'à présent est en HQ9 +, car l'interpréteur Foo a également le problème de débordement.
jimmy23013

4

> <> , 18 9 octets

"|o<"r>o|

-9 octets grâce à Jo King

Essayez-le en ligne! ( cité )

Explication

"|o<"r>o|
"|o<"     Pushes the quoted characters onto the stack
     r    Reverses the stack
      >o| Outputs all characters on stack & errors
""|o<"r>o|"
""          No-op
  |         Reverses the IP direction
     "r>o|" Pushes the quoted characters onto the stack (backwards)
  |o<       Outputs all characters on stack & errors

5
Bienvenue chez Code Golf!
Stephen

@Stephen Merci!
tjjfvi


2

Enchantements runiques , 9 octets

"!""$;"$;

Essayez-le en ligne! et""!""$;"$;"

De Kevin Cruijssen, qui a essentiellement corrigé ma première tentative en utilisant ce que j'ai fait dans ma seconde.

En descendant sur la route "les fungoids n'ont jamais de citations incomparables", il y a quelque chose qui ne devrait pas être correct ", fait allusion dans mon propre commentaire:

7 octets

0".""$;

Essayez-le en ligne! et"0".""$;"

Dans des circonstances normales, ce programme s'exécute en 0".""$;0".""$;poussant un entier 0, puis la chaîne ., concatène $;0, NOP, concatène une chaîne vide, imprime le haut de la pile (la chaîne .$;0) et se termine. L'encapsuler entre guillemets produit "0".""$;"ce qui pousse une chaîne 0, des NOP, concatène une chaîne vide, imprime le haut de la pile et se termine (en rendant l'entier non imprimé 0sous forme de chaîne). Le dernier "n'est pas exécuté (et ne fait de toute façon pas partie du programme d' origine ).

Les fongoïdes n'ont pas de littéraux de chaîne, ils ont une commande qui bascule le mode "lire sa propre source en tant que chaîne" et une certaine forme de "pointeur d'instruction a atteint la limite de la source" (généralement le contour), donc le même code source -positional-byte agit à la fois comme instruction "chaîne de début" et "chaîne de fin", créant un littéral de chaîne de cette ligne / colonne entière (à l'exclusion de "lui - même).


Réponse super rapide! Je me demande simplement si j'ai mal compris quelque chose au sujet de votre soumission, mais pour moi, cela n'imprime pas $;à la fin dans la version citée.
Geza Kerecsenyi

J'ai réalisé cela lors de la relecture et j'essaie de savoir si runique peut jamais exécuter ce bit. Commencer à enquêter sur les citations «non appariées» maintenant; par exemple "$;et ""$;"(guillemets récapitulatifs runiques jumelés avec eux-mêmes).
Draco18s

@GezaKerecsenyi Faites-moi savoir si mon programme mis à jour enfreint les règles.
Draco18s

Umm .. Comment est-ce valable? Votre programme sans sortie de guillemets !.(ce qui est correct), mais ne devrait pas votre programme avec sortie de guillemets 0$;? PS: Je ne connais pas du tout les enchantements runiques, mais un correctif potentiel basé sur votre disposition actuelle qui, je pense, serait valide serait 0"!""$;"$;(qui sort!$; tel quel , ou sort0$; s'il est entouré de guillemets). EDIT: En fait, je pense que vous pouvez supprimer la 0sortie !$;et et $;.
Kevin Cruijssen

1
@KevinCruijssen $est "imprimer en haut de la pile" et se ;termine. Mais vous avez essentiellement obtenu une réponse valable.
Draco18s






0

R, 16 octets

 ";print(";");" 

Notez que le code ci-dessus n'est pas encapsulé dans les guillemets supplémentaires et comporte des espaces de début et de fin.

Essayez-le (version non enveloppée)


Vous souhaiterez peut-être ajouter une note que le programme lié est la version non encapsulée.
Jonathan Frech

J'ajouterais également une note sur les espaces de début et de fin. Il est difficile de les remarquer autrement.
mbomb007

Modifié, merci pour les suggestions!
James Otto

0

AppleScript, 9 octets

return"&"

Expliqué:

return"&"    -- returns "&"

Cité:

"return"&""  -- implied return of the string "return" concatenated with ""
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.