Crie um programa que imprima a soma MD5 de sua origem no formato:
MD5 sum of my source is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sem trapaça - você não pode simplesmente ler o arquivo de origem e calcular sua soma. O programa não deve ler nenhuma informação externa.
Claro que você pode usar uma biblioteca MD5 disponível para o seu idioma.
code-golf
quine
cryptography
Petr Pudlák
fonte
fonte
Respostas:
Python
157149Saída:
Verificação em ideone
fonte
24ba0a79636297dab8803f571d4e3b44 md.py
usando md5sum em Linux\n
) no final do meu programa eu recebo o hash você postou:24ba0a79636297dab8803f571d4e3b44
. Estou bastante certo de que você tem uma nova linha extra. (Eu acredito que alguns editores irá fazer isso automaticamente)Python 2, 91 bytes
Usando a variante quine Python, que não requer repetir tudo duas vezes. Testado em ideone .
fonte
Perl + Digest :: MD5, 89 bytes
Nenhum link TIO porque o Digest :: MD5 não está instalado no TIO. Observe que isso exige que o nível de conformidade do idioma seja definido como 5.10 ou superior (
-M5.010
; isso não implica uma penalidade de bytes, de acordo com as regras do PPCG.Explicação
Este é mais um desafio "imprimir uma função do código fonte", o que significa que ele pode ser resolvido trivialmente através de um construtor de quine universal.
Construtor de quine universal
Usamos a
q()
notação de seqüência de caracteres (que aninha) para inicializar$_
, a variável "padrão" que o Perl usa para argumentos ausentes. Em seguida, temoseval
um argumento ausente, para que a string dentro doq()
seja avaliada.A string dentro de
q()
é uma descrição de como criar o programa inteiro; nós especificamos o restante do programa literalmente, depois usamos um sem escape$_
para substituir a string inteira por dentro.A técnica cria assim uma cadeia de caracteres com conteúdo idêntico à fonte do programa inteiro; nós poderíamos imprimi-lo para produzir uma solução. Também podemos fazer outras coisas primeiro, criando um construtor universal de quine.
O resto do programa
Muito simples: importe um MD5 embutido, imprima a string fixa especificada na pergunta (não vale a pena compactá-lo, acredito que no Perl o descompactador ocuparia mais espaço do que apenas declarar literalmente a string) e use o MD5 embutido a string que recebemos através do construtor universal de quine.
fonte
Node.js REPL (versão 0.9.3),
9694 bytesUsando a última versão do Node.js que existia quando este desafio foi lançado. Rastreei a documentação de 9 de novembro de 2012 para o módulo de criptografia do Node.js. e ele suportava todas as funções que usei aqui no passado.
Se você não deseja instalar uma versão antiga do Node.js apenas para testar esse código, tenha certeza de que ele também funciona na versão mais recente.
Node.js REPL (versão 7.0.0), 81 bytes
E aqui está uma versão usando as funções de seta do ES6.
Edit : obrigado a Anders Kaseorg por apontar um erro na minha versão do Node.js. 0.9.3, corrigindo o que salvou dois bytes.
fonte
`${s};x(x)`
não era.