Scrivi un programma che codifica il testo dato nel proprio testo, fornito come input, senza interrompere la sua logica. Il programma deve anche funzionare come decodificatore, ripristinando il messaggio originale dal suo testo. Deve conservare le sue funzioni di codifica / decodifica dopo la trasformazione.
Più formalmente parlando, il programma richiesto P deve eseguire le seguenti trasformazioni con il testo del messaggio dato M:
P (M, P) -> P *
P * (P *) -> M
Qui P * è il programma trasformato, che deve anche soddisfare le regole di cui sopra, ovvero:
P * (M2, P *) -> P **
P ** (P **) -> M2
e così via ... Ciascuno la codifica successiva non cancella il testo precedentemente codificato, quindi P ** porta due messaggi: M e M2.
Il modo più semplice per il programma di distinguere tra le modalità di codifica / decodifica è la presenza dell'argomento aggiuntivo M, ma la decisione finale dipende da te, a condizione che sia chiaramente indicato. Il programma potrebbe leggere il proprio testo dal file. Se la lingua scelta non ha mezzi per questo, il testo sorgente può essere passato al programma in qualsiasi altro modo.
Ci sono soluzioni banali, ovviamente, quindi questa è piuttosto una gara di popolarità. Tuttavia, impongo una limitazione che vieta i commenti nel testo del programma.