Scrivi un Palindrome-Polyglot-Quine


25

Scrivi una "palipolyquine": un programma che è un quine , un poliglotta e un palindromo .

Regole:

  • Il numero di lingue poliglotta è più preferibile della dimensione del codice.
  • La risposta più breve (in byte) vince, in caso di pareggio.
  • Le regole di Polyglot e Quine vedi qui: Scrivi una Polyquine .

Il mio esempio (ho un repository Freaky-Sources con test):

C # / Java (1747 byte):

/**///\u000A\u002F\u002A
using System;//\u002A\u002F
class Program{public static void//\u000A\u002F\u002A
Main//\u002A\u002Fmain
(String[]z){String s="`**?`@#_^using System;?_#^class Program{public static void?@#_^Main?_#main^(String[]z){String s=!$!,t=s;int i;int[]a=new int[]{33,94,38,64,35,95,96,63,36};String[]b=new String[]{!&!!,!&n!,!&&!,!&@!,!&#!,!&_!,!`!,!?!,s};for(i=0;i<9;i++)t=t.?@#_^Replace?_#replace^(!!+(char)a[i],b[i]);t+='*';for(i=872;i>=0;i--)t=t+t?@#_^[i];Console.Write?_#.charAt(i);System.out.printf^(t);}}/",t=s;int i;int[]a=new int[]{33,94,38,64,35,95,96,63,36};String[]b=new String[]{"\"","\n","\\","\\u000A","\\u002F","\\u002A","/","//",s};for(i=0;i<9;i++)t=t.//\u000A\u002F\u002A
Replace//\u002A\u002Freplace
(""+(char)a[i],b[i]);t+='*';for(i=872;i>=0;i--)t=t+t//\u000A\u002F\u002A
[i];Console.Write//\u002A\u002F.charAt(i);System.out.printf
(t);}}/*/}};)t(
ftnirp.tuo.metsyS;)i(tArahc.F200u\A200u\//etirW.elosnoC;]i[
A200u\F200u\A000u\//t+t=t)--i;0=>i;278=i(rof;'*'=+t;)]i[b,]i[a)rahc(+""(
ecalperF200u\A200u\//ecalpeR
A200u\F200u\A000u\//.t=t)++i;9<i;0=i(rof;}s,"//","/","A200u\\","F200u\\","A000u\\","\\","n\",""\"{][gnirtS wen=b][gnirtS;}63,36,69,59,53,46,83,49,33{][tni wen=a][tni;i tni;s=t,"/}};)t(^ftnirp.tuo.metsyS;)i(tArahc.#_?etirW.elosnoC;]i[^_#@?t+t=t)--i;0=>i;278=i(rof;'*'=+t;)]i[b,]i[a)rahc(+!!(^ecalper#_?ecalpeR^_#@?.t=t)++i;9<i;0=i(rof;}s,!?!,!`!,!_&!,!#&!,!@&!,!&&!,!n&!,!!&!{][gnirtS wen=b][gnirtS;}63,36,69,59,53,46,83,49,33{][tni wen=a][tni;i tni;s=t,!$!=s gnirtS{)z][gnirtS(^niam#_?niaM^_#@?diov citats cilbup{margorP ssalc^#_?;metsyS gnisu^_#@`?**`"=s gnirtS{)z][gnirtS(
niamF200u\A200u\//niaM
A200u\F200u\A000u\//diov citats cilbup{margorP ssalc
F200u\A200u\//;metsyS gnisu
A200u\F200u\A000u\///**/

Compilazione disponibile su ideone.com: C # , Java .


2
Ci sono delle regole coinvolte nella realizzazione del poliammide? Qualche limitazione? Se questa domanda è così com'è, allora una possibile soluzione (banale) è 1(che verrà prodotta 1in molte lingue qui, ed è palindromica).
clismique,

Ho aggiunto regole più formali.
Ivan Kochurkin,

2
Ah, bello. Bene, buona fortuna per la tua prima sfida! Solo alcune altre cose: non hai davvero bisogno del blocco di codice lì, e probabilmente dovresti migrare le regole dall'altra sfida qui.
clismique,

1
Una risposta in 5 lingue e 999 byte supera una risposta in 4 lingue e 100 byte?
ETHproductions

@ETHproductions, penso di si. È più difficile aggiungere una nuova lingua che ridurre il numero di righe.
Ivan Kochurkin,

Risposte:


14

CJam / GolfScript , 2 lingue, 50 byte

{`"0$~e#"+0$-1%"":n}0$~e##e~$0}n:""%1-$0+"#e~$0"`{

Provalo CJam! Provalo in GolfScript!

Huh, questo è rimasto senza risposta sorprendentemente a lungo.

Spiegazione

Probabilmente è più facile spiegarlo mostrando come ho trasformato il quine di base in ogni lingua in un quine poliglotta palindromico.

Quindi i quines di base in entrambe le lingue sono:

{".~"}.~

{"_~"}_~

In GolfScript e CJam, rispettivamente. Questi sono abbastanza simili grazie al fatto che CJam è stato originariamente ispirato da GolfScript (ma da allora ha deviato parecchio). La prima differenza che notiamo è che uno usa .per duplicare la parte superiore dello stack e l'altro usa _. Un trucco comune per evitare questo problema è usare 0$, poiché entrambe le lingue hanno l'operatore "copia-n-oggetto-su-pila" $. Quindi otteniamo {"0$~"}0$~, anche se ciò richiede ancora un avanzamento riga finale in GolfScript. Ma preoccupiamoci di questo alla fine.

Innanzitutto, dobbiamo renderlo un palindromo. La soluzione ovvia a questo è di aggiungere un commento e mettere il codice sorgente lì al contrario. Questo è abbastanza semplice, perché CJam usa e#per i commenti, e in GolfScript enon fa nulla, ed #è un commento. Quindi, se aggiungiamo e#...che funziona per entrambe le lingue. Ecco cosa abbiamo:

{"0$~"}0$~e##e~$0}"~$0"{

Ovviamente, ciò non stampa la parte in e#avanti. Possiamo ricostruirlo abbastanza facilmente dal codice sorgente stesso. Entrambe le lingue possono trasformare il blocco iniziale in una stringa con `e aggiungere la "0$~"parte con +, in modo da ottenere l'intero codice sorgente senza marchio in una singola stringa. Per aggiungere una copia speculare, tutto ciò che dobbiamo fare è duplicare 0$nuovamente la stringa e quindi invertirla con -1%, che funziona anche in entrambe le lingue. Quindi ora abbiamo questo:

{`"0$~e#"+0$-1%}0$~e##e~$0}%1-$0+"#e~$0"`{

Questa è una quine palindromica valida in CJam, e funziona anche in GolfScript ma stampa comunque quel fastidioso avanzamento di riga finale.

Il solito modo per impedirlo è quello di assegnare una stringa vuota a n, perché quello che GolfScript fa davvero è stampare il contenuto di nalla fine. Quindi quello di cui abbiamo bisogno è "":n. E che dire di CJam? Per fortuna, questo non fa nulla. ""è anche una stringa vuota (o elenco vuoto, sono la stessa cosa in CJam) e :mappa l'operatore n(stampa con avanzamento riga) sull'elenco. Ma poiché l'elenco è vuoto, mappare un operatore su di esso non fa assolutamente nulla. Quindi, possiamo sbarazzarci dell'alimentazione di linea, senza scherzare con CJam, e finire con la soluzione finale:

{`"0$~e#"+0$-1%"":n}0$~e##e~$0}n:""%1-$0+"#e~$0"`{

5

Perl 5 / Ruby / PHP / JavaScript (Browser), 4 lingue, 513 byte

$_='$z=0?"$&".next: eval("printf=console.log;atob`JCc`");printf("%s_=%s%s%s;eval(%s_);//#//;)_%s(lave;%s%s%s=_%s",$d=$z[0]||h^L,$q=$z[1]||h^O,$_,$q,$d,$d,$q,"0"?$_.split("").reverse().join(""):~~reverse,$q,$d)';eval($_);//#//;)_$(lave;')d$,q$,esrever~~:)""(nioj.)(esrever.)""(tilps._$?"0",q$,d$,d$,q$,_$,O^h||]1[z$=q$,L^h||]0[z$=d$,"s%_=s%s%s%;eval(s%_);//#//;)_s%(lave;s%s%s%=_s%"(ftnirp;)"`cCJ`bota;gol.elosnoc=ftnirp"(lave :txen."&$"?0=z$'=_$

Prova il Perl online!
Provalo online!
Prova il PHP online!
Convalidalo online!

$_='$z=0?"$&".next: eval("printf=console.log;atob`JCc`");printf("%s_=%s%s%s;eval(%s_);//#//;)_%s(lave;%s%s%s=_%s",$d=$z[0]||h^L,$q=$z[1]||h^O,$_,$q,$d,$d,$q,"0"?$_.split("").reverse().join(""):~~reverse,$q,$d)';eval($_);//#//;)_$(lave;')d$,q$,esrever~~:)""(nioj.)(esrever.)""(tilps._$?"0",q$,d$,d$,q$,_$,O^h||]1[z$=q$,L^h||]0[z$=d$,"s%_=s%s%s%;eval(s%_);//#//;)_s%(lave;s%s%s%=_s%"(ftnirp;)"`cCJ`bota;gol.elosnoc=ftnirp"(lave :txen."&$"?0=z$'=_$

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.