Inverse virgolette-Quine


29

La prospettiva di questa sfida è:

  • Se il programma viene eseguito normalmente, "deve essere stampato tutto il codice nei segni vocali ( - virgolette doppie).
  • Se il programma è racchiuso tra virgolette (a sua volta invertendo le virgolette), il codice che normalmente non è tra virgolette dovrebbe essere stampato.

Per esempio:

Supponiamo che tu abbia il seguente codice:

fancyStuff("myCode"); "I like".isGreat();

Se lo eseguissi, mi aspetterei un output di:

myCode
I like

Tuttavia, se lo racchiudessi tra virgolette, otterrei:

"fancyStuff("myCode"); "I like".isGreat();"

Quando viene eseguito questo codice, l'output previsto sarebbe:

fancyStuff(
); 
.isGreat();

Ovviamente, l'esempio sopra non è una risposta funzionale in nessuna lingua. Il tuo compito è scrivere il codice che funziona in questo modo.

Regole

  • Si applicano scappatoie standard.
  • I valori stampati, sia in forma quotata che non quotata, devono essere non vuoti o essere costituiti esclusivamente da spazi bianchi. Ciò significa anche che tutti i programmi devono includere almeno un set di virgolette.
  • Tuttavia, è consentito lo spazio bianco finale / precedente.
  • Non guardare il tuo codice, i nomi dei file richiesti, ecc.
  • Le virgolette senza pari non sono consentite
  • Se ci sono più stringhe, possono essere stampate come nuove righe (come nell'esempio) o in qualche altro modo leggibile dall'uomo - senza array o oggetti
  • Questo è , quindi vince la risposta più breve in byte.

Sono consentite le virgolette senza eguali e, in tal caso, come devono essere gestite?
negativo sette

3
@GezaKerecsenyi Quindi, è richiesto un separatore o possiamo semplicemente concatenare le stringhe?
Erik the Outgolfer,

9
In che modo un array non è un formato leggibile dall'uomo?
Mago del grano,

4
Le stringhe devono essere emesse nello stesso ordine in cui appaiono nel nostro codice?
Shaggy,

1
Penso che sarebbe stato leggermente più complesso se avessi dovuto stampare ciò che non era tra virgolette
Jo King il

Risposte:


28

Python 2 , 20 byte

print";print'print'"

-7 byte grazie a tsh

Provalo online!


Vecchia risposta:

Python 2 , 27 byte

'';print";print 2*"'';print

Provalo online!

Treno di pensieri dietro questa risposta:

Inizia con una stampa semplice, perché dobbiamo stampare qualcosa .

print"a"

Dobbiamo anche stampare qualcosa nel caso invertito, ad es. avere una stampa tra virgolette.

print"print"

Il caso non invertito è abbastanza buono a questo punto. Concentriamoci sul caso invertito. Iniziamo ora con la stringa print, che non può essere seguita immediatamente da un'istruzione print. Risolviamolo con un punto e virgola.

print";print"

Roba buona. Ad eccezione del fatto che il codice invertito non stampa nulla. Avremo bisogno di stampare printall'inizio, perché finisce tra virgolette, ma stampa anche tutto ciò che viene dopo la seconda citazione, perché finisce anche tra virgolette. Il modo ovvio per aggirare questo è di aggiungere printe moltiplicare l'ultima stringa per 2.

print";print 2*"print

Ora il codice invertito funziona bene, anche se dobbiamo stare attenti al fatto che la sezione prima della prima citazione e la sezione dopo la seconda citazione devono essere mantenute invariate durante le future modifiche. Per quanto riguarda il codice non invertito, genera un errore di sintassi: ancora una volta, è necessario introdurre un punto e virgola per separare le espressioni.

;print";print 2*";print

A Python non piace molto l'aspetto di quel punto e virgola solitario, quindi dobbiamo soddisfare la fame del serpente con due della stessa espressione no-op, inserite prima del primo punto e virgola e dell'ultimo punto e virgola. La maggior parte delle espressioni funzionerà bene nel primo caso, ma nel secondo caso deve seguire print";print 2*"il codice non invertito senza interrompere nulla. Possiamo usare '', che viene semplicemente concatenato con la stringa precedente.

'';print";print 2*"'';print

5
print(";print('print()');")è anche 27 byte, e anche Python 3.
TSH

2
@tsh Questo codice rivela una soluzione Python 2 a 20 byte che avrebbe dovuto essere evidente a ben vedere, molto bello!
negativo sette

19

CSS, 66 byte

body:after{content:"{}body:after{content:'body:after{content:}'}"}

"body:after{content:"{}body:after{content:'body:after{content:}'}"}"

Non molte domande possono essere risolte dai CSS ...


Sembra che funzioni body:afteranche su alcune implementazioni?
Shieru Asakoto,

@ShieruAsakoto Hai ragione. :afterè disponibile nella maggior parte dei browser per ragione compatibilità
tsh

@Shaggy Ma è difficile definire come funziona "racchiudi il tuo codice sorgente tra virgolette" quando vengono forniti sia HTML che CSS.
TSH

@tsh Va bene - non ho specificato più file nelle regole, dal momento che non mi aspettavo una risposta così unica!
Geza Kerecsenyi, il

10

HQ9 + [vedi note sotto] , 1016 byte

"Ciao mondo""""""""""""""""""""""""""""""""""""""""""""""" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""""""""""""Ciao mondo"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""""""""""""""""""""""Ciao mondo"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""""""""""""""""""""""Ciao mondo"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""Ciao mondo"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""Ciao mondo"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""Ciao mondo"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""Ciao mondo"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""""""""""""Ciao mondo"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""""""""""""Ciao mondo"""""""""""""""""""""""""""""""""""Ciao mondo"""""""""""""""""""""""""""""""""""Ciao mondo

Utilizzare l'implementazione su https://esolangs.org/w/index.php?title=HQ9%2B&oldid=59995 e compilare l'interprete con MinGW GCC 5.3.0 su Windows. Non sono sicuro che funzioni con un'altra versione del compilatore, poiché è necessario un comportamento indefinito di C per terminare il programma. Il buffer ha una lunghezza di 1000 byte. E il codice sorgente superiore a 1000 byte fa il trucco. Non sono sicuro di come siano successe.


7
Forse questa è la risposta HQ9 + più lunga su questo sito. (?)
martedì

1
"Per terminare il programma è necessario un comportamento indefinito di C" Il comportamento indefinito non è definito : può fare qualsiasi cosa.
Solomon Ucko,

Secondo la pagina 4 dello standard C18 : "Il possibile comportamento indefinito va dall'ignorare completamente la situazione con risultati imprevedibili, al comportamento durante la traduzione o l'esecuzione del programma in un modo documentato caratteristico dell'ambiente (con o senza l'emissione di un messaggio diagnostico ), al termine di una traduzione o esecuzione (con l'emissione di un messaggio diagnostico). "
Solomon Ucko,

@SolomonUcko Ma definiamo una lingua dal suo compilatore / interprete su questo sito. E la risposta va bene purché almeno un compilatore / interprete possa produrre il risultato corretto.
martedì

9

05AB1E , 4 byte

"A"§

Uscite concatenate senza separatore.

Provalo online o provalo online con le citazioni circostanti .

Spiegazione:

        # Program without surrounding quotes will output string "A"
"A"     # Push "A" to the stack
   §    # Cast it to a string
        # (output the top of the stack implicitly as result)

        # Program with surrounding quotes will output string "§"
""      # Push an empty string to the stack
  A     # Push the alphabet to the stack: "abcdefghijklmnopqrstuvwxyz"
   "§"  # Push "§" to the stack
        # (output the top of the stack implicitly as result)

Sfortunatamente, ciò viola la regola n. 2. Mentre va bene avere alcune virgolette vuote nel tuo codice, deve esserci almeno una non vuota in entrambe le forme racchiuse e non circondate.
Geza Kerecsenyi,

@GezaKerecsenyi Oops, leggi oltre la parte " in entrambe le forme citate e non quotate ". Ora dovrebbe essere risolto.
Kevin Cruijssen,

6

Japt , 4 byte

"P"s

Provalo non quotato o citato

Pè la variabile Japt per la stringa vuota e il smetodo suddivide una stringa - senza alcun argomento, non fa nulla.


O, ancora un po 'meno banale:

"+"u

Provalo non quotato o citato

Il primo è maiuscolo +e il secondo si aggiunge ua una stringa vuota.


3
Si noti che 4 è il punteggio minimo per questa domanda, poiché meno violano le restrizioni.
Jo King,

5

C # (compilatore interattivo Visual C #) , 113 112 107 70 64 byte

Write(".f();static void f(this string s){Write(s+')'+';');}//");

5 byte salvati grazie a sette negativi

Non quotato e citato

Dopo un po 'mi sono reso conto che la mia soluzione era troppo complicata. L'ultimo programma mostrato qui nasconde semplicemente il resto del programma in un commento per evitare errori se racchiuso tra virgolette.

Se racchiuso tra virgolette, Write(viene passato a un metodo di estensione, che lo stampa insieme );.


Split()-> Trim(), e var a->_
negativo sette

1
@negativeseven Grazie, non avrei mai pensato di usare uno scarto!
Incarnazione dell'ignoranza il

1
@negativeseven In realtà, la mia soluzione non ha nemmeno bisogno di essere così complicata, guarda la mia ultima modifica
Embodiment of Ignorance

64 byte usando un metodo di estensione. Abbastanza sorpreso che questo abbia funzionato così bene!
negativo sette

1
@negativeseven Grazie! E mi hai dato un'idea per la seconda parte della sfida: stavo catturando l'esterno in una variabile e poi usando Removee Insertsu di essa, ora posso semplicemente usare un metodo di estensione!
Incarnazione dell'ignoranza il


4

Foo , 4 byte

"P"s

Provalo online! Funziona anche in Japt.

5 byte (UTF-8)

"A"§

Provalo online! Funziona anche in 05AB1E.

9 byte

"!""$;"$;

Provalo online! Funziona anche in Incantesimi runici.

11 byte

say ".say~"

Provalo online! Funziona anche in Perl 6.

20 byte

print";print'print'"

Provalo online! Funziona anche in Python 2.

69 byte

body::after{content:"{}body::after{content:'body::after{content:}'}"}

Provalo online! Funziona anche in CSS.

Hmm ... Foo è un linguaggio altamente adattabile.


" Hmm ... Foo è un linguaggio altamente adattabile. " Per tutti coloro che non conoscono Foo: tutto viene emesso tra virgolette doppie e tutto il resto (tranne pochi altri caratteri incorporati) non è consentito. " Il linguaggio perfetto per il lavoro " è un eufemismo qui. ;)
Kevin Cruijssen il

2
Quindi, in sostanza, basta fregare ogni altra soluzione a questa sfida ?!
Shaggy,

@Shaggy La lingua è Foo. Quasi tutto con almeno un paio di virgolette ed entrambi gli output previsti non vuoti funzionano in Foo in questa sfida. Quindi "a"b 1"2"funziona anche in Foo. L'unica risposta in questa sfida che finora non è un poliglotta Foo è in HQ9 +, perché anche l'interprete Foo ha il problema di traboccare.
jimmy23013,

4

> <> , 18 9 byte

"|o<"r>o|

-9 byte grazie a Jo King

Provalo online! ( citato )

Spiegazione

"|o<"r>o|
"|o<"     Pushes the quoted characters onto the stack
     r    Reverses the stack
      >o| Outputs all characters on stack & errors
""|o<"r>o|"
""          No-op
  |         Reverses the IP direction
     "r>o|" Pushes the quoted characters onto the stack (backwards)
  |o<       Outputs all characters on stack & errors

5
Benvenuti in Code Golf!
Stephen,

@Stephen Grazie!
tjjfvi,


2

Incantesimi runici , 9 byte

"!""$;"$;

Provalo online! e""!""$;"$;"

Da Kevin Cruijssen, che ha sostanzialmente risolto il mio primo tentativo utilizzando quello che ho fatto nel secondo.

Scendendo per "i fungoidi non hanno mai virgolette senza eguali", il "bending delle regole" c'è qualcosa su questa strada che non dovrebbe essere OK ", accennato nel mio commento:

7 byte

0".""$;

Provalo online! e"0".""$;"

In circostanze normali, questo programma viene eseguito come 0".""$;0".""$;push di un numero intero 0, quindi la stringa ., concatena $;0, NOP, concatena una stringa vuota, stampa la parte superiore dello stack (la stringa .$;0) e termina. Avvolgerlo tra virgolette produce "0".""$;"che spinge una stringa 0, NOP, concatena una stringa vuota, stampa la parte superiore dello stack e termina (rendendo l'intero 0in forma non stringa in precedenza). L'ultimo non "viene eseguito (e comunque non fa parte del programma originale ).

I fungoidi non hanno letterali stringa, hanno un comando che attiva / disattiva la modalità "leggi il proprio sorgente come stringa" e una qualche forma di regola "puntatore istruzioni ha raggiunto il limite del sorgente" (di solito edge-wrap), quindi lo stesso codice sorgente -positional-byte agisce sia come istruzione "inizio stringa" che "fine stringa", creando una stringa letterale dell'intera riga / colonna (escluso lo "stesso).


Risposta super veloce! Mi chiedo solo se ho frainteso qualcosa sulla tua proposta, ma per me non stampa il testo $;alla fine nella versione citata.
Geza Kerecsenyi,

Mi sono reso conto che dopo aver riletto e sto cercando di capire se Runic può mai eseguire quel bit. Iniziando a indagare sulle virgolette "spaiate" ora; eg "$;e ""$;"(citazioni avvolgenti runiche che si accoppiano con se stesse).
Draco18s

@GezaKerecsenyi Fammi sapere se il mio programma aggiornato viola qualsiasi regola.
Draco18s

Umm .. Come è valido? Il tuo programma senza output di virgolette !.(che è corretto), ma non dovrebbe il tuo programma con output di virgolette 0$;? PS: Non conosco affatto Runic Enchantments, ma una potenziale soluzione basata sul tuo layout attuale che penso sia valida 0"!""$;"$;(quali output!$; come sono o output0$; se racchiusi tra virgolette). EDIT: In realtà, penso che puoi rilasciare 0e output !$;e $;.
Kevin Cruijssen,

1
@KevinCruijssen $è "print top of stack" e ;termina. Ma essenzialmente hai una risposta valida.
Draco18s






0

R, 16 byte

 ";print(";");" 

Si noti che il codice sopra riportato non è racchiuso tra virgolette aggiuntive e presenta spazi iniziali e finali.

Provalo (versione non incartata)


Si consiglia di aggiungere una nota che il programma collegato è la versione non incorporata.
Jonathan Frech, il

Vorrei anche aggiungere una nota sugli spazi iniziali e finali. È difficile notarli diversamente.
mbomb007,

A cura, grazie per i suggerimenti!
James Otto,

0

AppleScript, 9 byte

return"&"

Ha spiegato:

return"&"    -- returns "&"

citato:

"return"&""  -- implied return of the string "return" concatenated with ""
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.