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 $_
เพื่อแทนที่สตริงทั้งหมดสำหรับด้านใน
เทคนิคจึงสร้างสตริงที่มีเนื้อหาเหมือนกันกับแหล่งที่มาของโปรแกรมทั้งหมด เราสามารถพิมพ์มันเพื่อผลิตควินิน เรายังสามารถทำสิ่งอื่น ๆ ได้ก่อนอื่นการสร้างตัวสร้างควินสากล
ส่วนที่เหลือของโปรแกรม
use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex
ง่ายมาก: นำเข้า MD5 builtin จากนั้นพิมพ์สตริงคงที่ที่ระบุในคำถาม (มันไม่คุ้มค่ากับการบีบอัดฉันเชื่อว่าใน Perl ตัวขยายการบีบอัดจะใช้พื้นที่มากกว่าการระบุสตริงตามตัวอักษร) และใช้ MD5 builtin บน สตริงที่เราได้รับผ่านตัวสร้าง quine สากล