Escreva um programa que codifique o texto fornecido em seu próprio texto, fornecido como entrada, sem interromper sua lógica. O programa também deve funcionar como um decodificador, restaurando a mensagem original do seu texto. Ele deve manter suas funções de codificação / decodificação após a transformação.
Mais formalmente, o programa requerido P deve executar as seguintes transformações com o texto de mensagem M:
P (M, P) -> P *
P * (P *) -> M
Aqui, P * é o programa transformado, que também deve satisfazer as regras acima, ou seja:
P * (M2, P *) -> P **
P ** (P **) -> M2
e assim por diante ... a codificação subsequente não apaga o texto codificado anteriormente; portanto, P ** carrega duas mensagens - M e M2.
A maneira mais fácil para o programa distinguir entre os modos de codificação / decodificação é pela presença do argumento extra M, mas a decisão final é com você, desde que claramente indicado. O programa pode ler o próprio texto do arquivo. Se o idioma escolhido não tiver meios para isso, o texto fonte pode ser passado para o programa de qualquer outra maneira.
Existem soluções triviais, é claro, então esse é um concurso de popularidade. No entanto, imponho restrições que proíbem comentários no texto do programa.
fonte
Respostas:
Perl
Esta é uma linha única no Perl apenas porque é possível.
As mensagens são gravadas depois
__DATA__
, as mais recentes primeiro.fonte
Pitão
Você sabe o que? Por que não torná-lo uma única expressão?
Mensagem antiga; A função P aceita os argumentos conforme especificado e gera o código resultante / texto decodificado.
fonte
Javascript
Não tenho certeza se entendi corretamente a declaração do problema: meu decodificador decodificará qualquer programa e retornará a mensagem mais recente codificada no programa fornecido.
Código do teste:
fonte
Lote
Observe que precisa haver um retorno de carro após 'a última linha' de
goto :EOF
.Isso requer duas entradas do stdin. O primeiro deles é o que você deseja fazer;
e
, oud
(codifique e decodifique). A segunda entrada depende da primeira - se a primeira entrada fore
, a segunda entrada será a mensagem que você deseja codificar - se ford
, a segunda entrada será o número da mensagem que você deseja decodificar (que será fornecido após a codificação de uma mensagem).fonte
Cobra
Enquanto a ideia é trivial, a execução da mesma é menos.
Codificação
A codificação de uma mensagem no programa adicionará a linha
.message = .message ? x
imediatamente apósdef main
. Essa linha verifica se.message
é nulo e, em caso afirmativo, define.message
como uma matriz inteira contendo os valores do código de caractere de cada caractere na mensagem; a verificação e o posicionamento nulos evitam sobrescrever a nova mensagem por uma mais antiga. O novo programa é salvo emencode.cobra
Decodificação
A decodificação do programa adicionará três linhas no final do método principal, que fazem com que o programa converta os códigos de caracteres em
.message
uma string, que é salva nomessage.txt
momento em que o novo programa é executado. O novo programa é salvodecode.cobra
e o compilador é chamado nele.decode.cobra
é usado como um arquivo temporário e não pode ser usado para codificar ou decodificar outra mensagem, use o original ouencode.cobra
fonte