Quine a doppio servizio: quine! DlroW, olleH


13

Scrivi un programma che eseguirà il proprio codice sorgente quando eseguito, e nient'altro. Sembra facile, vero?

Il problema è che quando il codice sorgente viene invertito, il tuo programma deve generare "Hello, World!" esattamente, senza virgolette.

Questo è code-golf, quindi vince il conteggio di byte più basso.

Modifica : il tuo quine deve essere un quine corretto.



4
Ad essere onesto, questo non è il tipo di quine generalizzato di cui sto parlando, dal momento che non si tratta della "funzione di stampa X del tuo codice sorgente". Detto questo, probabilmente non si svolgerà in modo molto diverso dalle altre sfide "quando si inverte il programma ..." che abbiamo.
Martin Ender,

1
@ MartinBüttner È abbastanza simile alle sfide che hai descritto che ritengo valga lo stesso ragionamento.
Mego

Risposte:


8

Sì, 19 byte

Upxp"!dlroW ,olleH"

Uacquisisce una stringa Uall'inizio fino a quando non Uviene raggiunto il successivo , in questo caso il codice sorgente. pstampa l'elemento ed xè un collegamento di terminazione. Quando invertito, questo assomiglia a:

"Hello, World!"pxpU

Questo cattura la stringa e la stampa con p, terminando di nuovo il programma con x.

Provalo qui!


4
Uspinge Uimplicitamente? ಠ_ಠ
Sp3000

1
@ Sp3000 È fatto in modo che il programma possa modificarsi. Più tecnicamente, il Ucomando è il "comando di cattura del collegamento a catena". Non è fatto per il quining, ma ciò non mi impedirà di usarlo per il quining. : P
Conor O'Brien,

1
Non sono sicuro che questo valga come un vero quine. La nostra definizione richiede una sezione del programma che codifica una parte diversa del programma , ma U...che codifica U....
Dennis,

@Dennis definisce i codici? Pensavo che il pbit avesse prodotto l'output, che faceva parte della codifica.
Conor O'Brien,

1
Ho preso codificare come qualcosa che genera l'output, in modo pe xnon ci conterei. Ad esempio, la stringa SMBF più corta è ancora considerata una cheat quine, anche se il codice deve stamparla. Potrebbe valere la pena di chiedere chiarimenti a Martin.
Dennis,

20

JavaScript (ES6), 42 38 byte

f=_=>/\//g&&"f="+f||"!dlroW ,olleH">=_

Reversed

_=>"Hello, World!"||f+"=f"&&g//\/>=_=f

Spiegazione

Quando viene invertito, diventa una funzione anonima che restituisce la stringa Hello, World!.

Il regex /\//gdiventa un commento quando viene invertito, il che consente al sintatticamente non valido >=_=fdi essere commentato nel codice invertito.


Questo è molto intelligente. :) Non ci avrei pensato.
ericw31415

3
+1 solo per gli sfuggenti-occhi: =_=.
Darrel Hoffman,

6

JavaScript (ES6), 71 byte

trela=a=>alert("trela="+trela+"\ntrela\n``")//
`!dlroW ,olleH`
trela
``

Come funziona:

La riga 1 definisce la funzione trelache quando viene eseguita genera il codice sorgente del programma. La riga 2 è una stringa non assegnata, non fa nulla. Le linee 3 e 4 chiamano trelaabusando della sintassi della stringa del modello.

invertito:

``
alert
`Hello, World!`
//)"``n\alertn\"+alert+"=alert"(trela>=a=alert

Come funziona:

La riga 1 è una stringa non assegnata, non fa nulla. Le righe 2 e 3 abusano della sintassi della stringa del modello da stampare Hello, World!. La riga 4 è un commento.


Vedo che JavaScript sembra avere un certo margine di manovra con la sua sintassi. Bene, almeno più di Python. Bello.
R. Kap

Il vuoto ``non è necessario?
Rɪᴋᴇʀ

@EasterlyIrk No, è necessario chiamare la trelafunzione (che stampa il quine) nella versione in avanti
jrich

@jrich oh, non avevo capito che ``erano gli argomenti. Freddo.
R

2
Sento che dovrei abituarmi a vedere da queste trelaparti ...> _>
Conor O'Brien,



2

INVIO , 94 byte

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'

invertito:

'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"

Try it here.

Uscita su STDOUT. Fino a quando non troverò un migliore quadro quine, questo dovrà fare per ora.

Spiegazione

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"

Questo contiene la stringa di quine. Al contrario, questo viene spinto nello stack ma non emesso.

34¤¤,,,,,,,,,,,,,

In questo modo viene inserito uno stack di virgolette nello stack e viene emesso il risultato due volte fino a quando non rimane più nulla da generare. Al contrario, questo stamperà i charcodes già nello stack.

% 'H'e'l'l'o',' 'w'o'r'l'd'!'

Questo fa apparire l'elemento in cima allo stack (al contrario, questo farebbe apparire un carattere spaziale) e spinge una serie di codici a caratteri nello stack (al contrario, questi codici a caratteri verranno successivamente stampati dalle serie di ,).


Non riesco a capire se questo è un codice RETURN davvero pazzo, o solo un normale codice RETURN ._.
Downgoat,

Tutti e due ;_; Piango ogni volta
Mama Fun Roll,

2

Fissione 2, 42 byte

Adattamento spudorato di un eccellente quine di @ MartinBüttner in questa risposta

'!+O!'!d'!l'!r'!o'!W'! '!,'!o'!!l'!e'!H'R"

Provalo online

E invertito

"R'H!'e!'l!!'o!',!' !'W!'o!'r!'l!'d!'!O+!'

Provalo online

Nella versione quine l'atomo inizia dal R destra. Le "partenze modalità che avvolge la stampa successiva "(se stesso). Questo stampa tutto tranne il ". '!+imposta l'atomo su char ". Olo stampa e distrugge l'atomo che termina il programma.

La versione rovesciata inizia di Rnuovo e per ogni personaggio nel Hello, Worldset l'atomo e le stampe! senza distruggere l'atomo. Per il personaggio finale !la stampa Odistrugge l'atomo.


1

Javascript ES6, 55 byte

$=_=>`$=${$};$()//"!dlroW ,olleH"`;$()//"!dlroW ,olleH"

Abbastanza semplice, davvero.


0

Python 2, 131 byte

Inoltrare:

print(lambda x:x+repr(x)+")#'!dlroW ,olleH' tnirp")('print(lambda x:x+repr(x)+")#\'!dlroW ,olleH\' tnirp")(')#'!dlroW ,olleH' tnirp

Inverso:

print 'Hello, World!'#)'()"print '\Hello, World!'\#)"+)x(rper+x:x adbmal(tnirp'()"print 'Hello, World!'#)"+)x(rper+x:x adbmal(tnirp

La prima metà è una riga di una riga, seguita da a #per formare un commento che separa la prima metà dalla seconda metà più semplice.


Adattando questo Python Quine si ottiene_='_=%r;print _%%_#"!dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
Sp3000 il

0

C, 108 byte

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}//};)"!dlroW ,olleH"(stup{)(niam

C99 presumo?
Neil,

0

Python 2, 70 byte

_='_=%r;print _%%_#"dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
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.