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!

programmer5000
la source
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:

5

PHP et GolfScript, 2 octets

1

c'est-à-dire une nouvelle ligne et le chiffre 1.

Il s'agit d'un quine inverse dans GolfScript , contribué sur ce site par Justin . PHP n'a pas déclenché qu'il s'agit d'un langage de programmation, il imprime donc son entrée.

Gilles 'SO- arrête d'être méchant'
la source
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.

Erik le Outgolfer
la source
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é)
Neil
la source
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.

Okx
la source
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.

programmer5000
la source
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.

Gilles 'SO- arrête d'être méchant'
la source
Ils peuvent en fait.
ATaco