Escriba un programa que codifique el texto dado en su propio texto, proporcionado como entrada, sin interrumpir su lógica. El programa también debe funcionar como decodificador, restaurando el mensaje original de su texto. Debe conservar sus funciones de codificación / decodificación después de la transformación.
Hablando más formalmente, el programa requerido P debe realizar las siguientes transformaciones con el mensaje de texto M:
P (M, P) -> P *
P * (P *) -> M
Aquí P * es el programa transformado, que también debe satisfacer las reglas anteriores, es decir:
P * (M2, P *) -> P **
P ** (P **) -> M2
y así sucesivamente ... Cada la codificación posterior no borra el texto codificado previamente, por lo que P ** lleva dos mensajes: M y M2.
La forma más fácil para que el programa distinga entre los modos de codificación / decodificación es mediante la presencia del argumento adicional M, pero la decisión final depende de usted, siempre y cuando se establezca claramente. El programa puede leer su propio texto del archivo. Si el idioma elegido no tiene medios para esto, el texto fuente se puede pasar al programa de cualquier otra manera.
Existen soluciones triviales, por supuesto, por lo que este es un concurso de popularidad. Sin embargo, impongo restricciones que prohíben los comentarios en el texto del programa.
fuente
Respuestas:
Perl
Esta es una frase en Perl solo porque es posible.
Los mensajes se escriben después
__DATA__
, el más reciente primero.fuente
Pitón
¿Sabes que? ¿Por qué no convertirlo en una sola expresión?
Viejo mensaje; La función P toma los argumentos como se especifica y genera el código resultante / texto decodificado.
fuente
JavaScript
No estoy seguro si entiendo la declaración del problema correctamente: mi decodificador decodificará cualquier programa y devolverá el último mensaje codificado en el programa dado.
Código de prueba:
fuente
Lote
Tenga en cuenta que debe haber un retorno de carro después de 'la última línea' de
goto :EOF
.Esto toma dos entradas de stdin. El primero de los cuales es lo que quieres hacer;
e
, od
(codificar y decodificar). La segunda entrada depende de la primera; si la primera entrada ese
, entonces la segunda entrada será el mensaje que desea codificar; si es asíd
, la segunda entrada será el número del mensaje que desea decodificar (eso se proporcionará después de codificar un mensaje).fuente
Cobra
Si bien la idea es trivial, la ejecución de dicha idea no lo es tanto.
Codificación
Codificar un mensaje en el programa agregará la línea
.message = .message ? x
inmediatamente despuésdef main
. Esta línea verifica si.message
es nula, y si es así, se establece.message
en una matriz entera que contiene los valores del código de caracteres de cada carácter en el mensaje; la comprobación nula y el posicionamiento evitan sobrescribir el nuevo mensaje con uno anterior. El nuevo programa se guarda enencode.cobra
Descodificación
La decodificación del programa agregará tres líneas al final del método principal, lo que hará que el programa convierta los códigos de caracteres en
.message
una cadena, que luego se guardarámessage.txt
cuando se ejecute el nuevo programa. El nuevo programa se guardadecode.cobra
y se invoca el compilador.decode.cobra
se usa como un archivo temporal y no se puede usar para codificar o decodificar otro mensaje, use el original oencode.cobra
fuente