En arrière et en avant polyglotte quine!


9

Vous devez créer un polyglotte qui génère son code source dans une langue et son code source à l' envers dans une autre. Contrairement aux règles normales, vous êtes autorisé à lire le fichier actuel ou à utiliser une fonction intégrée pour obtenir le code source de votre soumission et l'inverser dans une langue. Votre code source ne peut pas être un palindrome.

Par exemple, si votre code source l'est abcxyz, il doit sortir abcxyzdans une langue et zyxcbadans une autre. Si votre code l'est abcxyzyxbca, il n'est pas valide car il s'agit d'un palindrome.

Bonne chance!


3
Les règles normales sont là pour une raison. Autoriser les quines intégrés rendra probablement ce défi trop large, et autoriser les codes sources de palindrome permet des réponses qui sont des quines vers l'avant pour les deux langues.
Erik the Outgolfer

Les palindromes @EriktheOutgolfer ne sont plus autorisés.
programmer5000

1
@EriktheOutgolfer Ah, donc le code source ne peut pas être un palindrome?
Luis Mendo

2
Je pense que vous devriez offrir une prime à la première personne pour terminer ce défi sans enfreindre les règles normales de quine. (peut-être 50 répétitions?)
clismique

1
J'ai lu "dans une langue" comme interdisant clairement le cas où les deux langues lisent le code source, mais la réponse actuellement la mieux votée fait exactement cela. Pouvez-vous modifier pour indiquer clairement si cela est censé être autorisé?
2017

Réponses:



6

Python 2 / Python 3, 71 octets

lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]

N'utilise pas de commandes internes quine.

Merci aux ovs de m'avoir réveillé en général.


lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]pour 71 octets
ovs

@ovs Oh bien sûr, comment je n'y pensais pas.
Erik the Outgolfer le

6

Lot / bash + tac, 39 octets

:;tac -r -s '.\|'$'\n' $0;exit
@type %0

Sorties vers l'avant en lot. Explication: Batch voit la première ligne comme une étiquette et l'ignore, tandis que la deuxième ligne copie simplement le fichier source dans STDOUT. (Notez que vous devez appeler le fichier, y compris l'extension, ou passer %0à %~f0.) bashVoit quatre commandes:

  • :ne fait rien (pareil true)
  • tac -r -s '.\|'$'\n' $0
    • -rpasse tacen mode regex
    • -s spécifie une expression régulière
    • '.\|'$'\n' est le regex, composé de
      • . n'importe quel caractère sauf la nouvelle ligne
      • \| ou
      • $'\n' une nouvelle ligne
    • Le résultat est que tacle fichier est divisé en caractères plutôt qu'en lignes.
  • exit arrête le script, ignore la quatrième commande
  • @type %0 (ignoré)

Je pense que vous pouvez remplacer la première ligne par :;rev $0|tac;exit. En outre, l'en-tête devrait plutôt indiquer Batch / sh + util-linux + coreutils .
Erik the Outgolfer

@EriktheOutgolfer $'\n'est un bashisme, n'inverse rev $0|tacpas correctement les retours à la ligne, et est-ce vraiment important que cela tacvienne dans un package?
Neil

$'\n'n'existe pas dans le remplacement que j'ai suggéré et rev $0|tacfonctionne pour moi. Et je pense qu'il vaut mieux spécifier les packages au lieu des utilitaires individuels, car parfois une confusion peut survenir (par exemple, quel package tac?).
Erik the Outgolfer le

@EriktheOutgolfer Essayez-le en ligne! est faux. Il en va de même pour l' essayer en ligne! (mais plus subtilement).
Neil

Pourriez-vous s'il vous plaît donner une explication?
programmer5000

3

PHP et Retina, 2 octets

1

Identique à la réponse PHP & GolfScript de Gille.

PHP lit simplement le code et le renvoie directement, Retina remplacera les correspondances d'une chaîne vide dans l'entrée et la remplacera par 1, et la sortira avec une nouvelle ligne.


2

JS (ES5), JS (ES6), 94 octets

function f(){try{eval("x=(f+'f()').split``.reverse().join``")}catch(e){x=f+"f()"};return x}f()

N'utilise aucune fonction intégrée de quine. Utilise simplement le fait que les fonctions JS se transforment en leur code. Peut probablement être joué au golf plus.


1

Si vous autorisez la lecture du code source, ce n'est pas vraiment une quine.

PHP & sh + util-linux, 6 octets

rev $0

Je suis sûr que les langues de golf habituelles peuvent le faire en 2 octets.


Ils peuvent en fait.
ATaco
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.