Erstellen Sie ein Programm, das die MD5-Summe seiner Quelle in der folgenden Form druckt:
MD5 sum of my source is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Kein Schummeln - Sie können die Quelldatei nicht einfach lesen und ihre Summe berechnen. Das Programm darf keine externen Informationen lesen.
Natürlich können Sie eine für Ihre Sprache verfügbare MD5-Bibliothek verwenden.
code-golf
quine
cryptography
Petr Pudlák
quelle
quelle
Antworten:
Python
157149Ausgabe:
Überprüfung bei ideone
quelle
24ba0a79636297dab8803f571d4e3b44 md.py
benutze ich md5sum unter Linux\n
) am Ende meines Programms bekomme ich den Hash Sie auf dem Laufenden:24ba0a79636297dab8803f571d4e3b44
. Ich bin mir ziemlich sicher, dass Sie einen zusätzlichen Zeilenumbruch haben. (Ich glaube, einige Redakteure werden dies automatisch tun)Python 2, 91 Bytes
Verwenden der Python-Quine-Variante, bei der nicht alles zweimal wiederholt werden muss. Auf ideone getestet .
quelle
Perl + Digest :: MD5, 89 Bytes
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
Wir verwenden die
q()
Zeichenfolgennotation (die verschachtelt), um$_
die "Standard" -Variable zu initialisieren , die Perl für fehlende Argumente verwendet. Danneval
fehlt uns ein Argument, damit der String im Innerenq()
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
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.
quelle
Node.js REPL (Version 0.9.3),
9694 BytesVerwenden der letzten Version von Node.js, die zum Zeitpunkt der Veröffentlichung dieser Herausforderung vorhanden war. Ich habe die Dokumentation für das Kryptomodul von Node.js vom 9. November 2012 aufgespürt und es hat alle Funktionen unterstützt, die ich hier früher verwendet habe.
Wenn Sie keine antike Version von Node.js installieren möchten, um diesen Code zu testen, können Sie sicher sein, dass er auch in der neuesten Version funktioniert.
Node.js REPL (Version 7.0.0), 81 Byte
Und hier ist eine Version, die die Pfeilfunktionen von ES6 verwendet.
Edit : Danke an Anders Kaseorg für den Hinweis auf einen Fehler in meiner Node.js 0.9.3-Version, durch den zwei Bytes eingespart wurden.
quelle
`${s};x(x)`
nicht unterstützt.