Cree un programa que imprima la suma MD5 de su fuente en la forma:
MD5 sum of my source is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sin trampas: no puede simplemente leer el archivo fuente y calcular su suma. El programa no debe leer ninguna información externa.
Por supuesto, puede usar una biblioteca MD5 disponible para su idioma.
code-golf
quine
cryptography
Petr Pudlák
fuente
fuente
Respuestas:
Python
157149Salida:
Verificación en ideone
fuente
24ba0a79636297dab8803f571d4e3b44 md.py
uso md5sum en linux\n
) al final de mi programa me sale el hash informados:24ba0a79636297dab8803f571d4e3b44
. Estoy bastante seguro de que tiene una nueva línea adicional. (Creo que algunos editores harán esto automáticamente)Python 2, 91 bytes
Usando la variante de quine de Python que no requiere repetir todo dos veces. Probado en ideone .
fuente
Perl + Digest :: MD5, 89 bytes
No hay enlace TIO porque Digest :: MD5 no está instalado en TIO. Tenga en cuenta que esto requiere que el nivel de conformidad del idioma se establezca en 5.10 o superior (
-M5.010
; esto no conlleva una penalización de bytes de acuerdo con las reglas de PPCG.Explicación
Este es otro desafío de "imprimir una función del código fuente", lo que significa que se puede resolver trivialmente a través de un constructor universal de quine.
Constructor universal de quine
Usamos la
q()
notación de cadena (que anida) para inicializar$_
, la variable "predeterminada" que Perl usa para los argumentos faltantes. Luego tenemoseval
un argumento que falta, para que la cadena dentro delq()
se evalúe.La cadena dentro de
q()
es una descripción de cómo crear todo el programa; especificamos el resto del programa literalmente, luego usamos un sin escape$_
para sustituir toda la cadena por el interior.La técnica crea así una cadena con contenidos idénticos a la fuente del programa completo; podríamos imprimirlo para producir una quine. Sin embargo, también podemos hacer otras cosas primero, creando un constructor universal de quine.
El resto del programa
Muy simple: importe un MD5 incorporado, luego imprima la cadena fija especificada en la pregunta (no vale la pena comprimirlo, creo que en Perl el descompresor ocuparía más espacio que simplemente indicar la cadena literalmente), y use el MD5 incorporado en la cadena que obtuvimos a través del constructor universal quine.
fuente
Node.js REPL (versión 0.9.3),
9694 bytesUsando la última versión de Node.js que existía cuando se publicó este desafío. He rastreado la documentación del 9 de noviembre de 2012 para el módulo criptográfico de Node.js, y admitía todas las funciones que he usado aquí en el día.
Si no desea instalar una versión antigua de Node.js solo para probar este código, puede estar seguro de que también funciona en la versión más reciente.
Node.js REPL (versión 7.0.0), 81 bytes
Y aquí hay una versión que usa las funciones de flecha de ES6.
Editar : gracias a Anders Kaseorg por señalar un error en mi versión Node.js 0.9.3, arreglando lo que ahorró dos bytes.
fuente
`${s};x(x)`
no lo era.