Le programme A génère le code du programme B lors de son exécution et B génère la source de A.
Exigences:
- Une seule langue dans les deux programmes
- Les programmes sont différents. Un programme qui sort lui-même n'est pas admissible.
- Les deux programmes sont non vides ou d'une longueur d'au moins 1 octet. Les sauts de ligne à la fois dans la source et la sortie sont ignorés
stdin est fermé.Ne lisez rien ( vous ne pouvez donc pas lire la source et la manipuler). La sortie passe à stdout.
Edit: stdin est connecté à/dev/null
. Vous pouvez le commander fermé si clarifié.- N'utilisez pas de
random
fonctions.
Additionnel:
- Donner des explications si possible
Le score est la longueur totale . Le retour à la ligne ne compte pas s'il n'affecte pas le programme.
Réponses:
CJam , 13 + 13 = 26 octets
Essayez-le en ligne!
Les sorties
Explication
Puisque
e\
est commutatif dans ses deuxième et troisième opérandes, l'autre programme fait exactement la même chose, en échangeantZ
et enY
retournant dans leur ordre d'origine.la source
CJam ,
11 + 13 = 2411 + 12 = 23 octetsEssayez-le en ligne!
Les sorties:
La sortie a 13 octets, mais:
J'ai donc changé l'espace en une nouvelle ligne pour en profiter.
Il est basé sur la quine appropriée CJam la plus courte:
Et
N^
c'est de xor la chaîne avec un retour à la ligne, qui ajoute un retour à la ligne s'il n'y a pas de retour à la ligne, et le supprimer s'il y en a, pour une chaîne que chaque caractère est unique.Je pense avoir vu ce quine dans la question de quine, mais je ne l'ai pas trouvé.
la source
RProgN 2 , 3 + 3 = 6 octets
Premier programme:
Essayez-le en ligne!
Deuxième programme:
Essayez-le en ligne!
-2 merci à Martin Ender .
la source
C, 95 + 95 = 190 octets
Merci à @immibis pour avoir économisé 16 * 2 octets!
Essayez-le en ligne!
Les sorties:
Essayez-le en ligne!
Quelles sorties:
la source
Javascript, 67 + 67 = 134 octets
1er programme:
2ème programme:
Ceci est basé sur la réponse d'Herman Lauenstein à Tri-interquine
Javascript (code source de lectures non valides),
75 + 75 = 15061 + 61 = 12258 + 58 = 11650 + 50 = 100 octetsenregistré 20 octets grâce à Tushar, 6 octets grâce à Craig Ayre, et enregistré 16 octets grâce à kamoroso94
1er programme:
2ème programme:
Échange les 1 avec les 0 et vice versa. Ils font tous les deux la même chose, produisant simplement une sortie différente en raison de leur code source.
la source
f.toString()
=>(''+f)
,(0|1)
=>0|1
,(a,b)
=>a
résultant enf=()=>("f="+(''+f).replace(/0|1/g,a=>a==0?1:0)+";f()");f()
f=_=>
et supprimer les parens du rappel de remplacement comme l'a suggéré @Tushar:a=>+!+a
"f="+(f+"")
par("f="+f)
-3 octets./0|1/g
et/1|0/g
par0
et1
respectivement pour -5 octets.f=_=>alert(("f="+f).replace(0,a=>+!+a)+";f()");f()
.Python 2, 63 + 63 = 126 octets
Essayez-le en ligne
Premier programme:
les sorties:
Deuxième programme:
Les sorties:
la source
JavaScript ( JsShell ), 35 + 34 = 69 octets
1:
2:
la source
Mathematica, 43 + 44 = 87 octets
et
la source
-1
qu'à la fin, non-1 1
.asmutils sh, 16 + 16 octets, abusant de la règle "stdin est fermé".
Puisque stdin est fermé et sh ouvrira son script à la première poignée disponible (plutôt que de le déplacer vers une poignée numérotée comme le font les shells modernes), tr finit par lire une copie du script sans l'avoir jamais ouvert.
Cette interquine est capable de charge utile, mais l'insertion d'une charge utile est délicate.
De plus, cette version originale abuse d'un bug fou dans l'ancien noyau que j'utilisais à l'époque. (Je ne sais pas ce qui se passe avec ce noyau - j'ai découvert plus tard qu'il avait également des nombres majeurs et mineurs différents pour les périphériques.) Si vous corrigez les changements ABI qui ont cassé les composants, l'interquine ne fonctionnera toujours pas. J'oublie si asmutils sh a exec ou non, mais si c'est le cas, c'est une version moderne:
Cela abuse d'un bug délibéré dans asmutils dd; il a une optimisation des performances qu'il appelle llseek pour sauter s'il le peut, mais pour enregistrer un octet, il passe SEEK_SET plutôt que SEEK_CUR. Il en résulte des ordures sur stderr mais l'interquine sur stdout. Asmutils dd n'a pas d'option pour supprimer le spam stderr.
la source
/dev/null
place? Quoi qu'il en soit, bon travail!#!/bin/sh
?Sous-charge , 32 + 32 = 64 octets
Essayez-le en ligne!
Essayez-le en ligne!
la source
Lisp commun, 58 caractères
... ou 24 caractères si cela ne vous dérange pas de supposer que la valeur
*print-circle*
globale est définie surT
:La représentation imprimée du code est lue comme une structure cyclique, où
#1#
pointe vers la cellule suivante#1=
. Nous citons des programmes pour qu'ils ne soient pas exécutés. Puisque*print-circle*
c'est T, le REPL prend soin d'émettre de telles variables de lecteur lors de l'impression; voici ce que le code ci-dessus imprime et renvoie:Lorsque nous évaluons le code ci-dessus, il imprime:
Si vous souhaitez vous en tenir à la valeur par défaut de
*print-circle*
, qui est NIL dans une implémentation conforme, vous devrez alors lier temporairement la variable:À l'intérieur du corps du LET, nous imprimons les choses avec
*print-circle*
T. Nous obtenons donc:Comme vous pouvez le voir, le nouveau programme ne se lie pas à nouveau
*print-circle*
, mais puisque nous utilisonswrite
, qui est la fonction de bas niveau appelée parprint
, nous pouvons passer des arguments supplémentaires tels que:circle
. Le code fonctionne alors comme prévu:Cependant, vous devez exécuter les programmes ci - dessus comme un script, pas à l' intérieur d' un REPL, parce que même si vous imprimez des choses tout en prenant soin des structures circulaires, à la fois
write
etprint
renvoie également la valeur en cours d' impression; et dans un REPL par défaut, la valeur est également en cours d'impression, mais en dehors du contexte dynamique où*print-circle*
est T.la source
> <> , 16 + 16 = 32 octets
et
Essayez-le en ligne!
Cela fonctionne en utilisant un saut dans le programme, le premier saut de programme sautera l'inverse de la pile (s'il inversait la pile, ce serait une quine). Le deuxième programme ne saute pas l'inverse, mais s'il était déjà inversé par le flux du programme, il créera l'original.
Ce code se terminera par une erreur.
la source
RProgN 2 , 7 + 7 = 14 octets
Je voulais essayer de montrer une meilleure utilisation de RProgN, plutôt que de simplement abuser des commandes d'impression ...
et...
Expliqué
Parce que cela imprime la pile à l'envers, la nouvelle constante est imprimée en premier, puis la version stringifed de la fonction est imprimée.
Essayez-le en ligne!
la source
LOGO , 65 + 66 = 131 octets
et
la source
Python 3, 74 + 74 = 148 octets
et
je ne le comprends pas non plusla source
> <> , 12 + 12 = 24 octets
et
Essayez-le en ligne!
Les deux programmes utilisent un littéral de chaîne d'encapsulation pour ajouter le code à la pile, puis produisent la
'
commande via différentes méthodes. Lors de l'impression de la pile, il pousse le code vers l'arrière, mais le'
reste à l'avant. Il existe plusieurs variantes qui produisent le'
;3d*
,d3*
,00g
,:c-
Lorsqu'il est associé avec3d*
et:9-
quand il est associé avec00g
.Une solution trop similaire pour poster, en Befunge-98 pour 13 * 2 octets
la source
Stax , 18 + 20 = 38 octets
Exécutez et déboguez en ligne!
Exécutez et déboguez en ligne!
Explication
Ajouté pour être complet. Port de la réponse CJam de @ jimmy23013. Bascule les nouvelles lignes à l'aide de set xor.
la source
Javascript (ES6), 36 + 36 = 72 octets
Programme 1:
Programme 2:
Ces programmes fonctionnent en se clonant et se remplacent
5
par4
et4
avec5
la source
Klein ,
2624 octetsEssayez-le en ligne!
Explication
Cela fonctionne de la même manière que mon Klein Quine , où il imprime la source à l'envers suivie d'un
"
, le dernier s'en est sorti en étant palindromique, donc tout ce que nous devons faire est de le rendre non palindromique sans endommager sa fonctionnalité. En changeant<
et:
nous avons pu le faire sans interférer avec les fonctionnalités.la source
Pari / GP , 36 + 36 = 72 octets
Essayez-le en ligne!
Essayez-le en ligne!
la source