Écrire un Palindrome-Polyglot-Quine

25

Écrivez une «palipolyquine»: un programme qui est une quine , un polyglotte et un palindrome .

Règles:

  • Le nombre de langues polyglottes est plus préférable que la taille du code.
  • La réponse la plus courte (en octets) l'emporte en cas d'égalité.
  • Les règles polyglottes et quines sont disponibles ici: Ecrire une polyquine .

Mon exemple (j'ai un dépôt Freaky-Sources avec des tests):

C # / Java (1747 octets):

/**///\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\///**/

Compilation disponible sur ideone.com: C # , Java .

Ivan Kochurkin
la source
2
Y a-t-il des règles impliquées dans la fabrication de la polyquine? Des limitations? Si cette question est telle 1quelle , alors une solution possible (triviale) est (qui sortira 1dans de nombreuses langues ici, et est palindromique).
clismique
J'ai ajouté des règles plus formelles.
Ivan Kochurkin
2
Ah cool. Et bonne chance pour ton premier défi! Juste quelques autres choses cependant: vous n'avez pas vraiment besoin du bloc de code là-bas, et vous devriez probablement migrer les règles de l'autre défi ici.
clismique
1
Une réponse en 5 langues, 999 octets bat-elle une réponse en 4 langues, 100 octets?
ETHproductions
@ETHproductions, je pense que oui. Il est plus difficile d'ajouter une nouvelle langue que de réduire le nombre de lignes.
Ivan Kochurkin

Réponses:

14

CJam / GolfScript , 2 langues, 50 octets

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

Essayez-le CJam! Essayez-le dans GolfScript!

Huh, cela est resté sans réponse étonnamment longtemps.

Explication

Il est probablement plus facile d'expliquer cela en montrant comment j'ai transformé le quine de base dans chaque langue en un quine polyglotte palindromique.

Les quines de base dans les deux langues sont donc:

{".~"}.~

{"_~"}_~

Dans GolfScript et CJam, respectivement. Ceux-ci sont assez similaires grâce au fait que CJam a été à l'origine inspiré par GolfScript (mais a depuis beaucoup dévié). La première différence que nous remarquons est que l'une utilise .pour dupliquer le haut de la pile et l'autre utilise _. Une astuce courante pour éviter ce problème est d'utiliser 0$, car les deux langues ont l'opérateur "copy-nth-item-on-stack" $. Nous obtenons donc {"0$~"}0$~, bien que cela ait encore besoin d'un saut de ligne arrière dans GolfScript. Mais inquiétons-nous à la fin.

Tout d'abord, nous devons en faire un palindrome. La solution évidente à cela est d'ajouter un commentaire et d'y mettre le code source à l'envers. C'est assez simple, car CJam utilise e#pour les commentaires, et dans GolfScript ene fait rien du tout, et #est un commentaire. Donc, si nous ajoutons e#...cela fonctionne pour les deux langues. Voici ce que nous avons:

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

Bien sûr, cela n'imprime pas réellement la pièce à e#partir de maintenant. Nous pouvons reconstruire cela assez facilement à partir du code source lui-même. Les deux langues peuvent transformer le bloc initial en une chaîne avec `et ajouter la "0$~"partie avec +, de sorte que nous obtenons le code source entier non miroir dans une seule chaîne. Pour ajouter une copie en miroir, tout ce que nous devons faire est de dupliquer à 0$nouveau la chaîne avec puis l'inverser avec -1%, qui fonctionne également dans les deux langues. Alors maintenant, nous avons ceci:

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

Il s'agit d'un quine palindromique valide dans CJam, et il fonctionne également dans GolfScript mais imprime toujours ce saut de ligne embêtant.

La façon habituelle d'éviter cela est d'attribuer une chaîne vide à n, car ce que fait réellement GolfScript, c'est le contenu de nfin. Nous avons donc besoin de "":n. Qu'en est-il de CJam? Heureusement, cela ne fait rien du tout. ""est également une chaîne vide (ou une liste vide, c'est la même chose dans CJam), et :mappe l'opérateur n(impression avec saut de ligne) sur la liste. Mais comme la liste est vide, le mappage d'un opérateur sur elle ne fait rien du tout. Par conséquent, nous pouvons nous débarrasser du saut de ligne, sans jouer avec CJam, et nous retrouver avec la solution finale:

{`"0$~e#"+0$-1%"":n}0$~e##e~$0}n:""%1-$0+"#e~$0"`{
Martin Ender
la source
5

Perl 5 / Ruby / PHP / JavaScript (navigateur), 4 langues, 513 octets

$_='$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$'=_$

Essayez le Perl en ligne!
Essayez-le en ligne!
Essayez le PHP en ligne!
Validez-le en ligne!

$_='$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$'=_$

Dom Hastings
la source