Perl + Digest :: MD5, 89 Bytes
$_=q(use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex"\$_=q($_);eval");eval
Keine TIO-Verbindung, da Digest :: MD5 nicht auf TIO installiert ist. Beachten Sie, dass hierfür die Sprachkonformitätsstufe auf 5.10 oder höher eingestellt sein muss ( -M5.010
dies ist gemäß den PPCG-Regeln nicht mit einer Byte-Strafe verbunden).
Erläuterung
Dies ist eine weitere Herausforderung, die darin besteht, eine Funktion des Quellcodes zu drucken, was bedeutet, dass sie mit einem universellen Quine-Konstruktor trivial gelöst werden kann.
Universeller Quine-Konstruktor
$_=q(…"\$_=q($_);eval");eval
Wir verwenden die q()
Zeichenfolgennotation (die verschachtelt), um $_
die "Standard" -Variable zu initialisieren , die Perl für fehlende Argumente verwendet. Dann eval
fehlt uns ein Argument, damit der String im Inneren q()
ausgewertet wird.
Die Zeichenfolge in q()
ist eine Beschreibung zum Erstellen des gesamten Programms. Wir geben den Rest des Programms buchstäblich an und verwenden dann ein Leerzeichen, $_
um den gesamten String für das Innere zu ersetzen.
Die Technik erzeugt somit eine Zeichenkette mit identischem Inhalt zur Quelle des gesamten Programms; wir könnten es drucken, um eine Quine zu produzieren. Wir können es aber auch zuerst anders machen, indem wir einen universellen Quine-Konstruktor erstellen.
Der Rest des Programms
use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex
Ganz einfach: Importieren Sie eine in MD5 integrierte Zeichenfolge, und drucken Sie die in der Frage angegebene feste Zeichenfolge aus (es lohnt sich nicht, sie zu komprimieren. Ich glaube, dass der Dekomprimierer in Perl mehr Speicherplatz beansprucht als nur die wörtliche Angabe der Zeichenfolge), und verwenden Sie die in MD5 integrierte Zeichenfolge Die Zeichenfolge, die wir über den universellen Quine-Konstruktor erhalten haben.