Perl + Digest :: MD5, 89 octets
$_=q(use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex"\$_=q($_);eval");eval
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
$_=q(…"\$_=q($_);eval");eval
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 avons eval
un argument manquant, de sorte que la chaîne à l'intérieur du q()
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
use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex
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.