Pendant mon temps sur PPCG, j'ai remarqué que les problèmes de quine et les problèmes de polyglotte sont très populaires. En outre, les méta-solutions aux problèmes, c'est-à-dire les scripts qui génèrent un programme qui est la solution à un problème, ont tendance à obtenir beaucoup de retours positifs de la communauté. Par conséquent, j'ai créé ce défi, qui met en œuvre ces trois idées.
Votre tâche alors, lecteur et passionné de golf de code , est de créer le plus court possible un script qui peut s'exécuter dans deux langues A et B pour générer des quines pour A et B. Lorsque votre programme est exécuté dans la langue A, il doit générer un programme qui est une quine en langue B mais pas en langue A et vice versa. Les langues A et B peuvent être des versions différentes de la même langue, à condition de garder à l'esprit que les quines générées ne devraient fonctionner que dans l'une des versions.
Gardez à l'esprit que les failles standard doivent être considérées comme fermées et que seules les quines appropriées sont autorisées.
Bonne chance, le moins de personnages gagne!
Réponses:
CJam 0.6.6 dev / GolfScript,
151412 octetsMerci à @ jimmy23013 pour avoir joué au golf sur 2 octets!
Reste à mettre à jour.
Vérification
Étant donné que la soumission implique des espaces importants, il est préférable de comparer les hexdumps.
CJam
CJam imprime
"`0$~"0$~
et un saut de ligne arrière. Essayez-le en ligne!Le programme généré s'imprime
"`0$~"0$~
avec le saut de ligne dans GolfScript ( essayez-le en ligne! ), Mais sans le saut de ligne dans CJam ( essayez-le en ligne! ).Comment fonctionne la métaquine
Comment fonctionne le quine
Contrairement à GolfScript, CJam n'imprime pas de saut de ligne par défaut, ce n'est donc pas une quine dans CJam.
GolfScript
Impressions GolfScript
"`0$~"0$~
, sans espaces blancs. Essayez-le en ligne!Le programme généré s'imprime
"`0$~"0$~
sans espaces blancs dans CJam ( essayez-le en ligne! ), Mais GolfScript ajoute un saut de ligne ( essayez-le en ligne! ).Comment fonctionne la métaquine
Comment fonctionne le quine
Contrairement à CJam, GolfScript ajoutera un saut de ligne au contenu de la pile, ce n'est donc pas une quine dans GolfScript.
la source
"0$p"0$~a:n;
.a:n
, mais l'utilisationp
ne m'est pas venue à l'esprit.CJam / Fission, 22 octets
Essayez-le dans CJam. Essayez-le à Fission.
Dans CJam, cela imprime le quine standard de fission :
Essayez le quine Fission.
Dans Fission, cela imprime une
"
variante -less du quine CJam standard:Essayez le quine CJam.
Cela fonctionne également pour 22 octets (impression des mêmes quines):
Explication
Dans CJam:
Donc à la fin du programme, la pile contient la chaîne
"'!+OR"
et le caractère"
, tous deux imprimés implicitement.Dans Fission, le flux du programme commence à la
R
avec un atome de droite.'"
modifie simplement la masse des atomes)
,5
et-
sont ignorés pour diverses raisons. Ensuite, l'atome passe en mode d'impression sur"
et s'imprime{'_'~}_~
.;
détruit l'atome et termine le programme.la source
{'_'~}
Clojure / Common Lisp, 274 octets
Quelques espaces ajoutés pour plus de lisibilité
Définit fondamentalement une macro qui renvoie une quine dans Clojure. Clojure nécessite des paramètres pour la définition de macro fournis en tant que vecteur (
[]
) tandis que Common Lisp (heureusement) l'ignore. Après cela, nous différons 2 langues en évaluant'()
ce qui est égalnil
et donc falsey en Common Lisp et esttrue
en Clojure. Ensuite, nous faisons des manipulations de chaînes en utilisant Clojure que Common Lisp n'essaie même pas d'évaluer comme il va dans une autreif
branche. Clojure d'autre part essaie de vérifier si une autre branche est au moins correcte avant de s'exécuter donc a dû utilisereval
à la fois pour être correct dans Clojure et pour sortir la chaîne correcte en Common Lisp.Remarque: le simple retour de deux chaînes différentes peut probablement être plus court, mais il ne sera pas différent d'un défi polyglotte concernant la sortie de différentes chaînes dans différentes langues. ¯ \ _ (ツ) _ / ¯
Exécution de la source d'origine Clojure: https://ideone.com/SiQhPf
Exécution source commune Common Lisp: https://ideone.com/huLcty
Sortie de fermeture:
((LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))) '(LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))))
Sortie Lisp commune:
((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))
Sortie de Clojure exécutée en Common Lisp: https://ideone.com/T1DF7H
Vice versa: https://ideone.com/Fezayq
la source
Jelly / GolfScript,
1816 octetsVérification
Le test de tous les programmes impliqués avec les flux d'octets exacts ne peut être effectué que localement.
Gelée
Avec la page de codes de Jelly , le programme se présente comme suit.
Ceci imprime ( Essayez-le en ligne! )
qui est une quine dans GolfScript ( Essayez-le en ligne! ), mais une erreur d'analyse dans Jelly ( Essayez-le en ligne! ).
GolfScript
En Latin-1, le programme se présente comme suit, avec un caractère DEL non imprimable entre
}
etþ
.Ceci imprime ( Essayez-le en ligne! )
ou, visualisé avec la page de codes de Jelly,
qui est une quine dans Jelly ( Essayez-le en ligne! ), mais imprime uniquement un saut de ligne dans GolfScript ( Essayez-le en ligne! ).
la source
”ṘṘ
, doncØV
devrait être parti, non?JavaScript / C 278 octets
À un nombre stupéfiant de 278 octets:
Le C quine:
int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}
Le quine JavaScript:
A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));
la source
Befunge / Fission, 35 octets
Essayez-le à Befunge | Essayez-le à Fission
Dans Befunge, cela produit le quine de fission :
Dans Fission, cela produit la quine Befunge :
la source
Python / Retina,
70656466 octetsJ'ai utilisé la même stratégie que celle utilisée dans mon précédent polyglotte Python / Retina .
Essayez en Python | Essayez dans la rétine
#
est un commentaire en Python, il imprime donc simplement le quine Retina en Python. Dans Retina, le premier étage (2 lignes) ne fait rien, car aucun#
ne sera trouvé dans l'entrée. L'étape suivante ne remplace rien par la base du quine Python. La troisième étape remplace chaque point-virgule par la#print _%
pièce. La dernière étape supprime tout#
.Quine in Retina:
Quine en Python:
Les quines utilisées peuvent être vues dans ce défi . Le quine Retina est une erreur en Python, et le quine Python n'a pas de sortie dans Retina.
la source
Python 3 / Python 2, 62 octets
Essayez-le en Python 2 , Python 3 .
Basé sur le quine Python ici . Le facteur de distinction entre les deux versions est ce qu'elles font avec
int(-1/2)
: en Python 2,/
est la division entière (arrondie vers le bas), avec un résultat de-1
; en Python 3,/
est la division en virgule flottante (-0.5
), quiint
tronque à0
.Nous construisons une chaîne
_
en trois parties.'_=%r;print(_%%_['
et'int(-1/2):])'
sont toujours les mêmes. La partie intéressante est'~'*-~int(-1/2)
:-~int(-1/2)
is0
et le tilde ne sont pas ajoutés à la chaîne;-~int(-1/2)
is1
et le tilde sont ajoutés à la chaîne.Ainsi, Python 2 génère le quine Python 3
et Python 3 génère le quine Python 2
Dans chaque version, l'expression à l'intérieur est
[ :]
évaluée à0
, ce qui fait que la tranche inclut la chaîne entière, tandis que dans la mauvaise langue, elle est évaluée à-1
, ce qui fait que la tranche n'inclut que le dernier caractère, tronquant la sortie, ce n'est donc pas un quine complet.la source
Brain-Flak , brainfuck
46174009 octetsEssayez-le en ligne!
Essayez-le en ligne!
L'explication est en route, je joue encore au golf
la source