Perl + Digest :: MD5, 89 bayt
$_=q(use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex"\$_=q($_);eval");eval
TIO bağlantısı yok, çünkü Digest :: MD5, TIO'da yüklü değil. Bunun, dil uygunluk seviyesinin 5.10 veya daha üstüne ayarlanmasını gerektirdiğini unutmayın ( -M5.010
; bu, PPCG kurallarına göre bir bayt cezası taşımamaktadır.).
açıklama
Bu, başka bir "kaynak kodun bir fonksiyonunu basar" mücadelesidir, yani evrensel bir quine yapıcısı aracılığıyla önemsiz bir şekilde çözülebileceği anlamına gelir.
Üniversal quine yapıcı
$_=q(…"\$_=q($_);eval");eval
Biz kullanmak q()
başlatmak için dize gösterimini (yuva) $_
, Perl argümanlar eksik için kullandığı "varsayılan" değişkeni. Sonra eval
eksik bir argümanla karşılıyoruz, böylece içindeki dize q()
değerlendirilir.
İçindeki dize q()
tüm programın nasıl oluşturulacağının bir açıklamasıdır; Programın geri kalanını tam anlamıyla belirtiriz, ardından $_
içindeki tüm dizeyi değiştirmek için çıkmaz işaretini kullanırız.
Böylece teknik, tüm programın kaynağında aynı içeriğe sahip bir dize oluşturur; bir parça üretmek için yazdırabiliriz. Bununla birlikte, ilk önce başka bir şey yapabiliriz, ancak evrensel bir incelik oluşturucu yapıyoruz.
Programın geri kalanı
use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex
Çok basit: bir MD5 yerleşikini içe aktarın, ardından soruda belirtilen sabit dizgiyi yazdırın (sıkıştırmaya değmez, Perl'de dekompresörün yalnızca dizgiyi ifade etmekten daha fazla yer alacağına inanıyorum) ve MD5 yerleşikini kullanın. evrensel quine yapıcısı üzerinden aldığımız dizge.