Écrivez un programme qui code un texte donné dans son propre texte, fourni en entrée, sans perturber sa logique. Le programme doit également fonctionner comme un décodeur, en restaurant le message d'origine à partir de son texte. Il doit conserver ses fonctions d'encodage / décodage après transformation.
Plus formellement, le programme requis P doit effectuer les transformations suivantes avec le texte de message donné M:
P (M, P) -> P *
P * (P *) -> M
Ici P * est le programme transformé, qui doit également satisfaire aux règles ci-dessus, c'est-à-dire:
P * (M2, P *) -> P **
P ** (P **) -> M2
et ainsi de suite ... Chacun l'encodage suivant n'efface pas le texte précédemment encodé, donc P ** transporte deux messages - M et M2.
Le moyen le plus simple pour le programme de distinguer les modes d'encodage / décodage est la présence de l'argument supplémentaire M, mais la décision finale vous appartient, à condition qu'elle soit clairement indiquée. Le programme peut lire son propre texte dans le fichier. Si la langue choisie n'a pas de moyen pour cela, le texte source peut être transmis au programme de toute autre manière.
Il existe bien sûr des solutions triviales, il s'agit donc plutôt d'un concours de popularité. Néanmoins, j'impose une restriction interdisant les commentaires dans le texte du programme.