Periodo 2 Invertito Quine


10

Il tuo compito è scrivere un programma che restituisca il proprio codice sorgente al contrario. Tuttavia, quando viene eseguito il codice invertito, dovrebbe generare il codice sorgente, rivolto nella direzione corretta.

Esempio

Di 'che il tuo programma è abc. Quando eseguito, dovrebbe essere emesso cba. cba, quando eseguito, dovrebbe generare abc.

Regole

Il tuo programma dovrebbe seguire tutte le regole di un quine corretto (tranne per l'output del codice sorgente). I palindromi sono vietati.

Nota a caso: Sono a conoscenza di questo , ma credo che questa sfida è diversa perché il codice trasformato deve avere le stesse proprietà.



Risposte:


9

RProgN , 3 byte

1
2

Grazie a @MartinEnder per avermi ricordato questa risposta .

Provalo online!

Come funziona

Questo sfrutta un potenziale difetto nella nostra definizione di quine corretta :

Deve essere possibile identificare una sezione del programma che codifica per una parte diversa del programma. ("Diverso" significa che le due parti appaiono in posizioni diverse.)

Inoltre, un quine non deve accedere alla propria fonte, direttamente o indirettamente.

Questo è ovviamente il caso qui, poiché l'output è il contrario del codice e il codice non è un palindromo.

RProgN - notazione del programmatore inverso - usa uno stack LIFO e stampa gli oggetti su di esso nell'ordine in cui sono spuntati. I due token 1 e 2 , separati da spazi e / o newline, vengono visualizzati in ordine inverso e vengono stampati separati da una nuova riga.

Questo stampa il programma inverso

2
1

che, a sua volta, stampa quello originale.

! enilno ti yrT


Mi piace l'URL.
Christopher,

4
Dovremmo risolvere questo problema ... Pubblicherei una nuova risposta (basata su questo commento ) sulla meta domanda, ma probabilmente non otterrebbe abbastanza attenzione per competere con le risposte esistenti.
ETHproductions

2
@ETHproductions: fallo. Sento che ci sono diversi problemi con la nostra attuale definizione di Quine. (Probabilmente, il mio linguaggio 7 è uno studio in casi limite per la giusta quineness; oltre a questo caso particolare, ne può gestire un bel po 'di altri.) FWIW, non sono sicuro che questo sia un vero e proprio reverse-quine anche dalla nostra attuale definizione; 1 e 2 sono chiaramente codificati da soli, quindi l'unico potenziale interesse è quello che sta codificando la nuova riga. (Questo è diverso da a 1\n1, in cui i due si 1codificano a vicenda; questo è probabilmente un quine corretto ma non un retromarcia corretto.)

9

Befunge-98 , 33 byte

b3*>1#;-:0g,:#;_@_;#:,g0:-;#1>*b3

Provalo online!


Bella prima risposta. Ma usa il #per farti intestazione. Vai anche su Tryitonline.net e ottieni un interprete online
Christopher,

2
Passa anche sotto il pulsante Salva e usa quello di invio codegolf.
Christopher,

L'ho modificato su TIO in primo luogo ho appena dimenticato di aggiungere il link, ma ora è stato aggiunto e grazie per il suggerimento Header
IQuick 143

Si noti che l'opzione "invio codegolf" su TIO fornisce un modello iniziale, inclusa l'intestazione.
Ørjan Johansen,

Ho pensato che gnon fosse consentito nelle quines Befunge, in quanto legge l'origine del programma direttamente dalla memoria?

7

Fissione 2 , 10 byte

"L;L'!+!'_

Provalo online!

Questo stampa:

_'!+!'L;L"

Provalo online!

E viceversa.

Spiegazione

Questa è una modifica del reverse quine . Funziona a nostro vantaggio qui che !viene utilizzato per la stampa ed è anche solo un punto di codice dalla citazione ". Ciò rende più semplice rendere palindromica la sezione di stampa delle quotazioni (la '!+!'). Cominciamo con il primo codice:

"L;L'!+!'_

Questo programma ha due punti di ingresso sulla Ls, che creano ciascuno un atomo di sinistra. Tuttavia, quello giusto colpisce immediatamente ciò ;che lo distrugge. Quello a sinistra entra in modalità stringa e si avvolge fino alla fine, in modo da stampare l'intero codice (tranne il ") da dietro a davanti. Questo ci dà già _'!+!'L;L. Non resta che stampare il ". _può essere ignorato, '!imposta la massa dell'atomo su 33 (il punto di codice di !), lo +incrementa su "e lo !stampa. Questo è tutto l'output fatto. Gli 'Linsiemi la massa atomi al punto di codice di Lma che è irrilevante. ;distrugge anche questo atomo e poiché non sono rimasti atomi, il programma termina.

Ora viceversa:

_'!+!'L;L"

Ancora una volta, abbiamo due punti di ingresso ma un atomo viene immediatamente distrutto. Questa volta passiamo !+!'prima attraverso la sezione, quindi iniziamo stampando un preventivo. È di '_nuovo irrilevante, ma qui abbiamo bisogno del _(o di qualche altro personaggio inutile) per evitare di 'sfuggire al ". L'atomo termina alla fine, attraversa il codice sorgente una volta in modalità stringa per stampare il resto del programma al contrario, Lquindi viene ignorato e ;distrugge l'atomo e termina il programma.

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.