Schreiben Sie ein Programm, das bestimmten Text in einen eigenen Text codiert, der als Eingabe bereitgestellt wird, ohne seine Logik zu stören. Das Programm muss auch als Decoder arbeiten und die ursprüngliche Nachricht aus ihrem Text wiederherstellen. Es muss seine Codierungs- / Decodierungsfunktionen nach der Transformation beibehalten.
Genauer gesagt muss das erforderliche Programm P die folgenden Transformationen mit dem gegebenen Nachrichtentext M durchführen:
P (M, P) -> P *
P * (P *) -> M
Hier ist P * das transformierte Programm, das auch die obigen Regeln erfüllen muss, das heißt:
P * (M2, P *) -> P **
P ** (P **) -> M2
und so weiter ... Jeder Bei der nachfolgenden Codierung wird zuvor codierter Text nicht gelöscht, sodass P ** zwei Nachrichten enthält - M und M2.
Der einfachste Weg für das Programm, zwischen Codierungs- / Decodierungsmodi zu unterscheiden, ist das Vorhandensein des zusätzlichen Arguments M, aber die endgültige Entscheidung liegt bei Ihnen, sofern dies klar angegeben ist. Das Programm liest möglicherweise seinen eigenen Text aus der Datei. Wenn die gewählte Sprache keine Mittel dafür hat, kann der Quelltext auf andere Weise an das Programm übergeben werden.
Natürlich gibt es triviale Lösungen, daher ist dies eher ein Beliebtheitswettbewerb. Trotzdem schränke ich das Verbieten von Kommentaren im Programmtext ein.