Créez un programme qui imprime la somme MD5 de sa source sous la forme:
MD5 sum of my source is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Pas de triche - vous ne pouvez pas simplement lire le fichier source et calculer sa somme. Le programme ne doit lire aucune information externe.
Bien sûr, vous pouvez utiliser une bibliothèque MD5 disponible pour votre langue.
code-golf
quine
cryptography
Petr Pudlák
la source
la source
Réponses:
Python
157149Sortie:
Vérification chez ideone
la source
24ba0a79636297dab8803f571d4e3b44 md.py
md5sum sous linux\n
) à la fin de mon programme , je reçois le hachage que vous avez affichée:24ba0a79636297dab8803f571d4e3b44
. Je suis assez certain que vous avez une nouvelle ligne supplémentaire. (Je crois que certains éditeurs le feront automatiquement)Python 2, 91 octets
Utiliser la variante Python quine qui ne nécessite pas de tout répéter deux fois. Testé sur ideone .
la source
Perl + Digest :: MD5, 89 octets
Pas de lien TIO car Digest :: MD5 n'est pas installé sur TIO. Notez que cela nécessite que le niveau de conformité du langage soit défini sur 5.10 ou supérieur (
-M5.010
; cela ne comporte pas de pénalité d'octet selon les règles PPCG.Explication
C'est encore un autre défi "imprimer une fonction du code source", ce qui signifie qu'il peut être résolu de manière triviale via un constructeur de quine universel.
Constructeur universel de quine
Nous utilisons la
q()
notation de chaîne (qui imbrique) pour initialiser$_
, la variable "par défaut" que Perl utilise pour les arguments manquants. Ensuite, nous avonseval
un argument manquant, de sorte que la chaîne à l'intérieur duq()
soit évaluée.La chaîne à l'intérieur du
q()
est une description de la façon de créer le programme entier; nous spécifions le reste du programme littéralement, puis utilisons un non échappé$_
pour substituer la chaîne entière à l'intérieur.La technique crée ainsi une chaîne avec un contenu identique à la source entière du programme; nous pourrions l'imprimer pour produire une quine. Nous pouvons également lui faire d'autres choses en premier, en créant un constructeur de quine universel.
Le reste du programme
Très simple: importez un module intégré MD5, puis imprimez la chaîne fixe spécifiée dans la question (cela ne vaut pas la peine de le compresser, je crois qu'en Perl le décompresseur prendrait plus d'espace que de simplement énoncer la chaîne littéralement), et utilisez le module intégré MD5 sur la chaîne que nous avons obtenue via le constructeur de quine universel.
la source
Node.js REPL (version 0.9.3),
9694 octetsUtilisation de la dernière version de Node.js qui existait lorsque ce défi a été publié. J'ai retrouvé la documentation du 9 novembre 2012 pour le module de chiffrement de Node.js, et il a pris en charge toutes les fonctions que j'ai utilisées ici à l'époque.
Si vous n'avez pas envie d' installer une version ancienne de Node.js juste pour tester ce code, soyez assuré qu'il fonctionne également dans la version la plus récente.
Node.js REPL (version 7.0.0), 81 octets
Et voici une version utilisant les fonctions fléchées d'ES6.
Edit : merci à Anders Kaseorg pour avoir signalé une erreur dans ma version Node.js 0.9.3, la correction qui a sauvé deux octets.
la source
`${s};x(x)`
ne l'était pas.