Quine / Error Quine Polyglot


14

Il tuo compito è semplice: scrivi un programma che può essere eseguito in due lingue. Dovrebbe essere un normale quine (stampa il proprio codice sorgente) nella lingua 1 e dovrebbe essere un quine di errore (genera un messaggio di errore identico al proprio codice sorgente) nella lingua 2.

Questo è , quindi vince l'invio valido più breve (in byte).

Regole:

  • Le lingue possono essere arbitrariamente simili. Superset / versioni simili / dialetti simili non sono vietati.
  • Le regole di errore quine sono le stesse di Make a Error Quine! .


Sono ammessi due dialetti diversi di BASIC?
MD XF,

@MDXF Se hanno lo stesso identico comportamento, ad eccezione del fatto che si genera invece STDERR, allora no. Altrimenti si.
Esolanging Fruit

Quindi la mia risposta è valida, quindi.
MD XF,

@MDXF È valido.
Esolanging Fruit

Risposte:


2

Befunge-93 (FBBI) / C (tcc) , 93 + 62 = 155 byte

^"
>#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 pcomando consuma tre argomenti (quindi perché abbiamo spinto 3 numeri, altrimenti parte della stringa sarebbe mangiato qui), ed :e 1caratteri spingere un totale di 4 valori nello stack, che abbiamo counteract con a pe 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.


È necessario trovare un sistema operativo che supporti tale nome file ed elencarlo. So che Windows non lo supporta.
mbomb007,

@ mbomb007 Presumibilmente, Linux accetterà di solito qualsiasi carattere stampabile in un nome file tranne /. Non posso provarlo da solo adesso.
negativo sette

1
Quale versione di tcc hai usato? Sto usando 0.9.27-3 direttamente dai repository Arch, e l'errore che ottengo è <define>:1: error: missing terminating " character.
randomdude999,

1
Bene, ho trovato la versione esatta di tcc utilizzata su TIO e ho ricevuto lo stesso messaggio di errore, ma solo se le virgolette del nome file corrispondono. Avere virgolette senza pari sembra abbastanza necessario per far funzionare questa risposta. Ecco qualcosa che può aiutarti: Linux consente anche nuove righe nei nomi dei file. Questo è l'output tcc quando si aggiunge una nuova riga e un preventivo alla fine del nome file: (collegamento gist lungo) . Ciò significa che dovrai trovare un modo per stampare la nuova riga e le cose sulla seconda riga.
randomdude999,

@ randomdude999 Grazie. Ho aggiornato la soluzione per tenere conto di questo. Abbastanza interessante davvero che una citazione senza eguali causi un tale problema ...
negativo sette

0

Applesoft BASIC / Commodore LCD BASIC , 13 byte

?SYNTAX ERROR

In Apple] [emulatore, premi il RESETtasto per accedere alla modalità BASIC.
Nell'emulatore LCD Commodore, premi RightArrowEnterper accedere all'applicazione BASIC.
In entrambi, non digitare ?SYNTAX ERRORtutte le maiuscole, poiché vengono maiuscole automaticamente.


2
lo stato non concorrenziale è riservato agli invii in lingue che sono state fatte dopo la sfida. Se non è valido secondo le regole, eliminalo. Attendere prima la conferma dell'OP perché penso che questo dovrebbe essere valido (supponendo che funzioni).
HyperNeutrino,

@HyperNeutrino Grazie, a cura.
MD XF

1
Allora dovrò sospettare anche questo. Questa domanda è piuttosto più brutale di quanto sembri ...
Ørjan Johansen

1
@ ØrjanJohansen Beh, non sono così sicuro di questo. Tecnicamente, il Commore LCD non aveva un flusso di byte di errore standard, quindi è davvero un errore quine?
MD XF,

1
@ ØrjanJohansen questo ? Immagino che potrebbe significare che è impossibile dire se questo è valido o meno. Potremmo attendere la conferma dall'OP?
MD XF,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.