(Ispirato da questo commento su una vecchia domanda.)
sfondo
Un errore quine (noto anche come "Kimian quine") è un programma che, una volta compilato o eseguito, fa sì che il compilatore / interprete / runtime stampi un messaggio di errore con testo identico al programma stesso e nient'altro. Ai fini di questa sfida, stiamo definendo "errore" in senso lato, per includere anche gli avvisi.
Compito
In questa sfida, stiamo cercando un quine che è anche un quine di errore. Una volta eseguito, il programma deve stampare normalmente il proprio codice sorgente (cioè non come un messaggio di errore / avviso); questo deve essere un vero quine (cioè una parte del programma deve codificare una parte diversa dell'output). Inoltre, la compilazione e l'esecuzione del programma devono anche causare l'implementazione del codice sorgente del programma, e nient'altro, come messaggi di errore o di avviso. (Si noti che ciò significa che non sarà possibile utilizzare errori di compilazione, nelle lingue in cui questi impediscono l'esecuzione normale del programma.) In altre parole, il codice sorgente del programma verrà stampato due volte, una volta tramite ciascun metodo.
chiarimenti
- Nella maggior parte dei casi, sarà ovvio ciò che è e non è un messaggio di errore / avviso; non stiamo distinguendo tra i due qui. In casi ambigui, definire un messaggio di errore / avviso come qualsiasi testo emesso dall'implementazione: 1. come conseguenza di qualcosa di diverso dall'esecuzione di un comando (o qualunque sia l'equivalente più vicino nella lingua); o 2. che non faceva parte dell'input al comando che lo produceva come output.
- La parte di errore / avviso del quine non deve necessariamente essere un quine corretto (anche se nella maggior parte dei casi lo sarà per caso, poiché la maggior parte dei messaggi di errore e di avviso contengono notevoli quantità di testo fisso).
- È accettabile che il programma generi più errori / avvisi, che formano la fonte del programma quando vengono concatenati insieme. Non è accettabile generare errori / avvisi che non compaiono nella fonte.
- A differenza di molte sfide, è probabile che le opzioni fornite al compilatore e al nome del file del programma siano altamente rilevanti in questa sfida. Dato che la sfida potrebbe non essere possibile altrimenti, sono disposto a essere flessibile qui, anche se se si esegue l'implementazione in modo insolito, ricordare che le regole PPCG addebitano una penalità di byte per farlo (pari al numero di caratteri aggiuntivi che dovresti aggiungere sulla riga di comando il modo "normale" più breve per eseguire un programma), quindi dovrai specificare la dimensione della penalità nel tuo post. (Ad esempio, se l'interprete in uso legge il programma da un file e non ha particolari restrizioni sul nome file, il modo normale più breve per eseguire il programma sarebbe da un file con un nome file di 1 carattere; quindi,
- La versione del compilatore / interprete che usi potrebbe essere pertinente, quindi come parte del tuo invio, indica un compilatore o un interprete specifico su cui funziona il tuo programma e quale versione è richiesta. (Ad esempio, un invio C potrebbe indicare "C (gcc 6.2.0)" nell'intestazione.)
- Si noti che questa attività potrebbe non essere possibile in tutte le lingue. Nelle lingue in cui si trova, il metodo più semplice sarà probabilmente quello di trovare un messaggio di errore o di avviso per il quale è possibile personalizzare alcuni sottoinsiemi del testo (cambiando il nome di qualcosa che viene citato nel messaggio; i nomi dei file sono una scelta comune qui, ma non l'unico). Sarò particolarmente colpito (e sorpreso) se qualcuno trova un modo per farlo usando solo messaggi di errore e di avviso il cui testo è stato corretto.
Condizione di vittoria
Questa è una sfida di code-golf , quindi una voce è considerata migliore se ha un numero di byte inferiore. Pertanto, una volta che il programma funziona, si desidera ottimizzarlo per ridurre il numero di byte il più possibile. (Tuttavia, non scoraggiarti se c'è già una voce più breve, soprattutto se è in una lingua diversa; quello che stiamo davvero cercando qui è abbreviare il più possibile un algoritmo o un'idea particolare dietro un programma, ma vedere più le soluzioni in diverse lingue o che si basano su principi diversi sono sempre utili.)