Les polyglottes sont des programmes valables simultanément dans plusieurs langages de programmation. La plupart de ces polyglottes sont écrites de telle manière que certaines constructions d'un langage sont interprétées comme des commentaires d'un autre langage (par exemple #define
en C étant interprété comme un commentaire dans plusieurs langages de script).
Je suis curieux de voir s'il est possible de faire un polyglotte non trivial qui ne contient aucun commentaire, mais qui change également immédiatement lorsque vous supprimez tout caractère non blanc, je vous mets donc au défi de proposer un tel programme.
Les règles concrètes sont les suivantes:
- (Production). Votre programme doit produire une sortie sur la console sous chacune de vos langues. Autrement dit, votre programme n'est pas autorisé à quitter simplement sans imprimer quoi que ce soit.
- (Variance). Pour détendre la définition polyglotte standard, la sortie du programme peut varier selon les langues.
- (Les erreurs). Votre programme ne doit produire aucune erreur (au sens large) sous aucune de vos langues. Pour la plupart des langues, cela est défini comme renvoyant un code de sortie non nul du compilateur et / ou de l'interpréteur.
- (Restriction). La suppression de tout caractère non blanc de votre code devrait amener votre programme à modifier son comportement sous chacune de vos langues. Le programme peut "changer" en devenant invalide pour cette langue ou en modifiant la sortie produite.
- Il s'agit d'un défi de code . Winner est le programme valable dans la plupart des langages de programmation. Les égalités seront rompues en faveur d'une durée de programme plus courte.
La règle de restriction ne s'applique pas à la suppression de plusieurs caractères. Autrement dit, c'est bien si la suppression simultanée de plusieurs caractères n'entraîne aucun changement pour l'une de vos langues.
Notez que la règle de restriction implique que vous ne pouvez pas utiliser l'espace blanc comme l'une de vos langues, car la suppression de tout caractère non espace blanc ne changera pas le comportement du programme espace blanc.
Voici un exemple simple d'un programme qui remplit toutes les restrictions ci-dessus, pour les langages Python 2 et Python 3:
print("Hello World!")
Si vous supprimez un caractère print
, les deux langues lanceront un NameError
; la suppression de tout crochet ou guillemet générera un SyntaxError
, et la suppression de tout caractère de chaîne modifiera la sortie dans les deux langues. (Notez que print("hello", "world")
c'est un programme plus subtil, mais toujours valide selon les règles ci-dessus).
Cet exemple est un peu boiteux car Python 2 et Python 3 sont très similaires, donc je n'accepterai aucune autre solution qui n'utilise que des versions différentes du même langage (en particulier Python 2 et Python 3).
print("Hello World!")
est également un code Ruby valide