Perl + Digest :: MD5, 89 byte
$_=q(use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex"\$_=q($_);eval");eval
Không có liên kết TIO vì Digest :: MD5 không được cài đặt trên TIO. Lưu ý rằng điều này đòi hỏi mức độ tuân thủ ngôn ngữ phải được đặt thành 5.10 hoặc cao hơn ( -M5.010
; điều này không mang theo hình phạt byte theo quy tắc PPCG.
Giải trình
Đây là một thách thức "in một chức năng của mã nguồn", có nghĩa là nó có thể được giải quyết một cách tầm thường thông qua một hàm tạo quine phổ quát.
Xây dựng quine phổ quát
$_=q(…"\$_=q($_);eval");eval
Chúng tôi sử dụng q()
ký hiệu chuỗi (tổ nào) để khởi tạo $_
, biến "mặc định" mà Perl sử dụng cho các đối số bị thiếu. Sau đó, chúng tôi eval
với một đối số bị thiếu, để chuỗi bên trong q()
được đánh giá.
Chuỗi bên trong q()
là một mô tả về cách tạo toàn bộ chương trình; chúng tôi chỉ định phần còn lại của chương trình theo nghĩa đen, sau đó sử dụng một $_
chuỗi không thay thế để thay thế toàn bộ chuỗi bên trong.
Kỹ thuật này do đó tạo ra một chuỗi có nội dung giống hệt với nguồn của toàn bộ chương trình; chúng ta có thể in nó để tạo ra một quine. Tuy nhiên, chúng ta cũng có thể làm những việc khác trước, tạo ra một hàm tạo quine phổ quát.
Phần còn lại của chương trình
use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex
Rất đơn giản: nhập một nội dung MD5, sau đó in chuỗi cố định được chỉ định trong câu hỏi (không đáng để nén nó, tôi tin rằng trong Perl, bộ giải nén sẽ chiếm nhiều không gian hơn là chỉ nêu chuỗi theo nghĩa đen) và sử dụng MD5 dựng sẵn chuỗi chúng tôi nhận được thông qua các hàm tạo quine phổ quát.