Perl + Digest :: MD5, 89 byte
$_=q(use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex"\$_=q($_);eval");eval
Tidak ada tautan TIO karena Digest :: MD5 tidak diinstal pada TIO. Perhatikan bahwa ini membutuhkan tingkat kesesuaian bahasa diatur ke 5.10 atau lebih tinggi ( -M5.010
; ini tidak membawa penalti byte sesuai dengan aturan PPCG.
Penjelasan
Ini adalah satu lagi tantangan "cetak fungsi kode sumber", yang berarti bahwa hal itu dapat diselesaikan dengan sepele melalui konstruktor quine universal.
Konstruktor quine universal
$_=q(…"\$_=q($_);eval");eval
Kami menggunakan q()
notasi string (yang bersarang) untuk menginisialisasi $_
, variabel "default" yang digunakan Perl untuk argumen yang hilang. Lalu kita eval
dengan argumen yang hilang, sehingga string di dalam q()
akan dievaluasi.
String di dalam q()
adalah deskripsi cara membuat seluruh program; kita tentukan sisa program secara literal, lalu gunakan unescaped $_
untuk mengganti seluruh string di dalam.
Teknik ini dengan demikian menciptakan string dengan konten yang identik dengan sumber seluruh program; kita bisa mencetaknya untuk menghasilkan quine. Kita juga bisa melakukan hal-hal lain terlebih dahulu, membuat konstruktor quine universal.
Sisa dari program ini
use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex
Sangat sederhana: mengimpor bawaan MD5, lalu mencetak string tetap yang ditentukan dalam pertanyaan (tidak layak untuk mengompresnya, saya percaya bahwa di Perl, dekompresor akan mengambil lebih banyak ruang daripada hanya menyatakan string secara harfiah), dan menggunakan MD5 bawaan pada string yang kami dapatkan melalui konstruktor quine universal.