Perl + Digest :: MD5, 89 байт
$_=q(use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex"\$_=q($_);eval");eval
Нет ссылки на TIO, потому что Digest :: MD5 не установлен на TIO. Обратите внимание, что для этого необходимо, чтобы уровень соответствия языка был установлен на 5,10 или выше ( -M5.010
это не влечет за собой байтовых штрафов в соответствии с правилами PPCG.
объяснение
Это еще одна задача «напечатать функцию из исходного кода», означающая, что ее можно решить тривиально с помощью универсального конструктора quine.
Универсальный конструктор Quine
$_=q(…"\$_=q($_);eval");eval
Мы используем q()
строковую нотацию (которая встраивается) для инициализации $_
, переменную «по умолчанию», которую Perl использует для пропущенных аргументов. Затем мы eval
с отсутствующим аргументом, так что строка внутри q()
будет оценена.
Строка внутри q()
является описанием того, как создать всю программу; мы указываем остальную часть программы буквально, затем используем unescaped, $_
чтобы заменить всю строку внутри.
Таким образом, техника создает строку с идентичным содержимым для всего исходного кода программы; мы могли бы напечатать это, чтобы произвести quine. Мы также можем сначала сделать что-то другое, создав универсальный конструктор quine.
Остальная часть программы
use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex
Очень просто: импортируйте встроенную MD5, затем напечатайте фиксированную строку, указанную в вопросе (сжимать ее не стоит, я считаю, что в Perl декомпрессор займет больше места, чем просто буквальное указание строки), и используйте встроенную MD5 на строка, которую мы получили через универсальный конструктор Quine.