Perl + Digest :: MD5, 89 bajtów
$_=q(use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex"\$_=q($_);eval");eval
Brak łącza TIO, ponieważ Digest :: MD5 nie jest zainstalowany na TIO. Zauważ, że wymaga to ustawienia poziomu zgodności języka na 5.10 lub wyższy ( -M5.010
; nie wiąże się to z karą bajtową zgodnie z zasadami PPCG.
Wyjaśnienie
Jest to kolejne wyzwanie „wypisz funkcję kodu źródłowego”, co oznacza, że można go w prosty sposób rozwiązać za pomocą uniwersalnego konstruktora quine.
Uniwersalny konstruktor quine
$_=q(…"\$_=q($_);eval");eval
Do q()
inicjalizacji używamy notacji łańcuchowej (która zagnieżdża) $_
, „domyślnej” zmiennej, której Perl używa do brakujących argumentów. Następnie mamy eval
z brakującym argumentem, aby łańcuch wewnątrz wartości był q()
oceniany.
Ciąg wewnątrz q()
jest opisem, jak stworzyć cały program; określamy resztę programu dosłownie, a następnie używamy nieskalowanego, $_
aby podstawić cały ciąg znaków do środka.
W ten sposób technika tworzy ciąg o identycznej treści do źródła całego programu; moglibyśmy go wydrukować, by stworzyć quine. Możemy jednak najpierw zrobić inne rzeczy, tworząc uniwersalnego konstruktora quine.
Reszta programu
use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex
Bardzo proste: zaimportuj wbudowany MD5, a następnie wydrukuj stały ciąg znaków określony w pytaniu (nie warto go kompresować, uważam, że w Perlu dekompresor zajmowałby więcej miejsca niż tylko podanie ciągu literalnie) i używałby wbudowanego MD5 ciąg otrzymany przez uniwersalny konstruktor quine.