Les quines sont amusantes. Les polyglottes sont aussi amusantes. Polyglot Quines existe, mais nous pouvons relever la barre encore plus haut.
Écrivez un fichier qui contient un programme valide pour les langues α, β et γ. Lorsque le fichier est exécuté (éventuellement après sa compilation) en tant que programme de langue α ou β, la sortie du programme doit être de la même forme qu'une soumission valide à ce concours. Si votre fichier est exécuté comme un programme de langue γ, il doit afficher un nombre. La valeur de ce nombre est la chaîne des exécutions précédentes du programme interprétée comme un nombre binaire.
Cette explication peut être un peu difficile à comprendre, alors voici un exemple. Soit Α, Β et Γ des fonctions qui exécutent leur entrée en tant que langage α, β ou γ resp. programme et retourner la sortie de ces programmes. Soit x une soumission valide à ce concours. Ensuite, l'expression suivante, où nous traitons x par le langage β, α, β, α, α, β et γ dans cet ordre, donnera 41, puisque 41 10 = 101001 2 .
Γ (Β (Α (Α (Β (Α (Β ( x )))))))))
Vous ne pouvez pas supposer que l'avant-dernière exécution de la chaîne est une exécution en langage β. Dans le cas où votre soumission d'origine est directement exécutée en tant que programme de langue γ, elle affichera 0.
Votre programme doit se comporter correctement pour un maximum de seize compilations dans la chaîne; c'est-à-dire que le nombre le plus élevé que votre programme pourrait imprimer à la fin est 2 15 - 1. Bien sûr, votre programme est autorisé à prendre en charge des chaînes de compilation plus longues.
Il s'agit d'un concours de popularité visant à encourager les solutions créatives. La soumission avec le plus grand nombre de voix gagne.
la source
magic += Number(System.env.lang_version[-1])
a,b,c
ou1,2,3
=)Réponses:
Python 2, Python 3,> <> (poisson)
Explication de Python
Les interprètes Python 2 et Python 3 fonctionnent de la même manière, sauf que la
v=int(1/2*2)
variable obtient des valeurs différentes (0
et1
) car Python 2 utilise la division flottante et Python 3 utilise la division entière.À chaque exécution, ils ajoutent l'expression
+0*2
ou+1*2
à la première ligne (après#;n
) et à lax
chaîne (après la dernière commande d'écriture). L'interpréteur> <> utilise le premier ajout et les Pythons utilisent le second pour créer des quines correctes.Code après
B(A(B(B(x))))
:> <> (Poisson) explication
Lorsque vous exécutez l'interpréteur> <>, le pointeur de code rebondit à partir des
#
retours à la ligne autour de la première ligne et en commençant par la fin de la première ligne et en se dirigeant vers l'ouest commence à pousser des nombres sur la pile. Si un opérateur arrive (+
ou*
) il fait sortir les deux premiers éléments de la pile et repousse le résultat. Avec cette méthode, nous nous retrouvons avec la représentation base2 des exécutions précédentes (13
dans l'exemple précédent). C'est le nombre souhaité, nous le sortons donc avecn
et nous terminons avec;
.la source