Quine / Error Quine Polyglot


14

Votre tâche est simple: écrire un programme qui peut être exécuté en deux langues. Il doit s'agir d'un quine normal (imprime son propre code source) dans la langue 1, et doit être un quine d'erreur (génère un message d'erreur identique à son propre code source) dans la langue 2.

C'est du , donc la soumission valide la plus courte (en octets) gagne.

Règles:

  • Les langues peuvent être arbitrairement similaires. Les sur-ensembles / versions similaires / dialectes similaires ne sont pas interdits.
  • Les règles de quine d'erreur sont les mêmes que celles de Make an Error Quine! .


Deux dialectes différents de BASIC sont-ils autorisés?
MD XF

@MDXF S'ils ont exactement le même comportement sauf que l'on sort à la place vers STDERR, alors non. Sinon, oui.
Esolanging Fruit

Donc , ma réponse est valide, alors.
MD XF

@MDXF Il est valide.
Esolanging Fruit

Réponses:


2

Befunge-93 (FBBI) / C (tcc) , 93 + 62 = 155 octets

^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected

Essayez-le en ligne!: Befunge-93 , C

Merci à randomdude999 d'avoir noté que le nom de fichier nécessite des guillemets correspondants pour fonctionner.

Doit être enregistré sous le nom de fichier ^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p, où\n trouve une nouvelle ligne. Pour cette raison, le TIO pour C ne fonctionne pas exactement comme prévu. Testé pour travailler sur Lubuntu.

Explication (C):

Le programme ne parvient pas à compiler et tcc affiche avec bonheur le nom du fichier dans le cadre de son message d'erreur. Il existe plusieurs erreurs de compilation, basées sur le début du code. ^au début nous donne un declaration expected, qui est court et ne contient aucun caractère problématique comme ". D'un autre côté, les développeurs gcc et clang sont très pessimistes et ont choisi de produire plusieurs erreurs à la fois, ce qui n'est pas très agréable, donc nous n'utilisons pas leurs compilateurs.

Explication (Befunge-93):

Befunge est pratique pour les quines dans la mesure où son code peut également être utilisé comme données de caractères, grâce à la "commande, qui bascule le mode chaîne. Au début, nous effectuons des opérations de pile inutiles, puis émettons une p(commande put) qui place un caractère NUL à (0, 1). Ensuite, nous réfléchissons le pointeur d'instruction à gauche et commençons à tout lire sous forme de chaîne. Cela doit être fait vers la gauche, en raison de la nature LIFO de la pile. Après s'être enroulé et avoir à "nouveau atteint le personnage, la chaîne se termine. Notez que le caractère NUL a remplacé le$ caractère, créant un délimiteur au milieu de la chaîne. Nous poussons ensuite 3 nombres sur la pile et sautons par-dessus le NUL (car il bloque malheureusement l'interpréteur lorsqu'il est exécuté en tant qu'instruction). La partie statique du message d'erreur doit être exécutée ici. La plupart de ses caractères sont sans opération, mais la pcommande consomme trois arguments (d'où la raison pour laquelle nous avons poussé 3 chiffres, sinon une partie de la chaîne serait mangée ici), et les caractères :& 1poussent un total de 4 valeurs dans la pile, ce que nous neutralisons avec un pet un$(pop et jeter) instruction. Ensuite, une certaine arithmétique est effectuée pour pousser les codes ASCII ^"\n>#001p#"et enfin une boucle imprime toutes les valeurs de la pile en tant que caractères jusqu'à ce qu'elle trouve un caractère NUL et se termine.


Vous devez trouver un système d'exploitation qui prend en charge un tel nom de fichier et le répertorier. Je sais que Windows ne prend pas cela en charge.
mbomb007

@ mbomb007 Censément, Linux acceptera généralement tout caractère imprimable dans un nom de fichier à l'exception de /. Je ne peux pas le tester moi-même en ce moment.
négatif sept

1
Quelle version de tcc avez-vous utilisée? J'utilise 0.9.27-3 directement depuis Arch repos, et l'erreur que j'obtiens est <define>:1: error: missing terminating " character.
randomdude999

1
D'accord, j'ai trouvé la version exacte de tcc utilisée sur TIO, et j'ai reçu le même message d'erreur, mais seulement si les guillemets du nom de fichier correspondent. Avoir des citations inégalées semble tout à fait nécessaire pour que cette réponse fonctionne. Voici quelque chose qui peut vous aider: Linux autorise également les sauts de ligne dans les noms de fichiers. Il s'agit de la sortie tcc lors de l'ajout d'un retour à la ligne et d'une citation à la fin du nom de fichier: (lien essentiel long) . Cela signifie que vous devrez cependant trouver un moyen d'imprimer la nouvelle ligne et les éléments sur la 2e ligne.
randomdude999

@ randomdude999 Merci. J'ai mis à jour la solution pour en tenir compte. Assez intéressant en effet qu'une citation inégalée provoque un tel problème ...
négatif sept

0

Applesoft BASIC / Commodore LCD BASIC , 13 octets

?SYNTAX ERROR

Dans l'émulateur Apple] [, appuyez sur la RESETtouche pour passer en mode BASIC.
Dans l'émulateur LCD Commodore, appuyez sur RightArrowEnterpour accéder à l'application BASIC.
Dans les deux cas, ne saisissez pas ?SYNTAX ERRORtoutes les majuscules, car elles sont automatiquement capitalisées.


2
le statut de non-concurrentiel est réservé aux soumissions dans les langues qui ont été faites après le défi. S'il n'est pas valide selon les règles, supprimez-le. Attendez d'abord la confirmation de OP car je pense que cela devrait être valide (en supposant que cela fonctionne).
HyperNeutrino

@HyperNeutrino Merci, édité.
MD XF

1
Il va falloir que je suspecte celui-ci aussi. Cette question est plutôt plus brutale qu'il n'y paraît ...
Ørjan Johansen

1
@ ØrjanJohansen Eh bien, je ne suis pas sûr de celui-ci. Techniquement, l'écran LCD Commore n'avait pas de flux d'octets d'erreur standard, est-ce vraiment une quine d'erreur?
MD XF

1
@ ØrjanJohansen cela ? Je suppose que cela pourrait signifier qu'il est impossible de dire si cela est valide ou non. Nous pourrions attendre la confirmation du PO?
MD XF
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.