^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected
Provalo online !: Befunge-93 , C
Grazie a randomdude999 per aver notato che il nome file richiede virgolette corrispondenti per funzionare.
Deve essere salvato con il nome file ^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p
, dove \n
è una nuova riga. Per questo motivo, TIO per C non funziona esattamente come previsto. Testato per funzionare su Lubuntu.
Spiegazione (C):
Il programma non riesce a compilare e tcc genera felicemente il nome del file come parte del suo messaggio di errore. Esistono più errori di compilazione che è possibile ottenere, in base all'inizio del codice. ^
all'inizio ci dà un declaration expected
, che è breve e non contiene caratteri problematici come "
. D'altra parte, gli sviluppatori di gcc e clang sono molto pessimisti e hanno scelto di generare più errori contemporaneamente, il che non è molto carino, quindi non stiamo usando i loro compilatori.
Spiegazione (Befunge-93):
Befunge è conveniente per le quine in quanto il suo codice può essere utilizzato anche come dati carattere, grazie al "
comando, che attiva la modalità stringa. All'inizio, eseguiamo alcune operazioni dello stack inutili, quindi emettiamo un p
(comando put) che posiziona un carattere NUL su (0, 1). Quindi riflettiamo il puntatore dell'istruzione a sinistra e iniziamo a leggere tutto come una stringa. Questo deve essere fatto a sinistra, a causa della natura LIFO dello stack. Dopo essersi avvolto e aver raggiunto "
nuovamente il carattere, la stringa termina. Si noti che il carattere NUL ha sostituito il$
carattere, creando un delimitatore a metà della stringa. Spingiamo quindi 3 numeri sullo stack e saltiamo sopra il NUL (perché purtroppo si blocca l'interprete quando eseguito come istruzione). La parte statica del messaggio di errore deve essere eseguita qui. La maggior parte dei suoi caratteri sono gabbie, ma il p
comando consuma tre argomenti (quindi perché abbiamo spinto 3 numeri, altrimenti parte della stringa sarebbe mangiato qui), ed :
e 1
caratteri spingere un totale di 4 valori nello stack, che abbiamo counteract con a p
e a$
(pop and scarard) istruzione. Quindi, viene eseguita un'aritmetica per spingere i codici ASCII ^"\n>#001p#"
e infine un ciclo stampa tutti i valori nello stack come caratteri fino a quando non trova un carattere NUL e termina.