Perl + Digest :: MD5, 89 byte
$_=q(use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex"\$_=q($_);eval");eval
Nessun collegamento TIO perché Digest :: MD5 non è installato su TIO. Si noti che ciò richiede che il livello di conformità della lingua sia impostato su 5.10 o superiore ( -M5.010
; questo non comporta una penalità di byte in base alle regole PPCG.
Spiegazione
Questa è un'altra sfida "stampa una funzione del codice sorgente", il che significa che può essere banalmente risolto tramite un costruttore di quine universale.
Costruttore universale di quine
$_=q(…"\$_=q($_);eval");eval
Usiamo la q()
notazione di stringa (che nidifica) per inizializzare $_
, la variabile "predefinita" che Perl usa per argomenti mancanti. Quindi abbiamo eval
un argomento mancante, in modo che la stringa all'interno del q()
venga valutata.
La stringa all'interno di q()
è una descrizione di come creare l'intero programma; specifichiamo il resto del programma letteralmente, quindi usiamo un senza escape $_
per sostituire l'intera stringa con l'interno.
La tecnica crea quindi una stringa con contenuti identici all'intera sorgente del programma; potremmo stamparlo per produrre un quine. Possiamo anche fare prima altre cose, creando un costruttore universale di quine.
Il resto del programma
use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex
Molto semplice: importa un built-in MD5, quindi stampa la stringa fissa specificata nella domanda (non vale la pena comprimerlo, credo che in Perl il decompressore occuperebbe più spazio rispetto alla semplice affermazione della stringa letteralmente) e usa il built-in MD5 su la stringa che abbiamo ottenuto tramite il costruttore di quine universale.