Написать Палиндром-Полиглот-Куайн

25

Написать «palipolyquine»: программа , которая является Куайн , а полиглот , и палиндром .

Правила:

  • Количество языков полиглотов предпочтительнее, чем размер кода.
  • Самый короткий ответ (в байтах) выигрывает в случае ничьей.
  • Правила Polyglot и Quine см. Здесь: Напишите Polyquine .

Мой пример (у меня есть репозиторий Freaky-Sources с тестами):

C # / Java (1747 байт):

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

Компиляция доступна на ideone.com: C # , Java .

Иван Кочуркин
источник
2
Есть ли какие-либо правила, связанные с созданием полихина? Какие-нибудь ограничения? Если этот вопрос «как есть», то возможное (тривиальное) решение 1(которое будет выводиться здесь 1на многих языках и является палиндромным).
clismique
Я добавил более формальные правила.
Иван Кочуркин
2
Ах, круто. Что ж, удачи в первом испытании! Просто еще кое-что: вам не нужен там блок кода, и вам, вероятно, следует перенести правила из другой задачи сюда.
clismique
1
Превышает ли 5-язычный 999-байтовый ответ 4-язычный 100-байтовый ответ?
ETHproductions
@ETHproductions, я думаю, что да. Труднее добавить новый язык, чем уменьшить количество строк.
Иван Кочуркин

Ответы:

14

CJam / GolfScript , 2 языка, 50 байтов

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

Попробуй CJam! Попробуйте это в GolfScript!

Да, это осталось без ответа на удивление долго.

объяснение

Вероятно, это проще всего объяснить, показав, как я превратил основную квин на каждом языке в палиндромную полиглоту.

Итак, основные квинусы на обоих языках:

{".~"}.~

{"_~"}_~

В GolfScript и CJam соответственно. Они очень похожи, благодаря тому, что CJam изначально был вдохновлен GolfScript (но с тех пор сильно изменился). Первое отличие, которое мы замечаем, состоит в том, что один использует .для дублирования вершины стека, а другой использует _. Обычный прием, позволяющий избежать этой проблемы, заключается в использовании 0$, поскольку оба языка имеют оператор «копировать-n-элемент-на-стеке» $. Таким образом, мы получаем {"0$~"}0$~, хотя для этого все еще нужен завершающий перевод строки в GolfScript. Но давайте позаботимся об этом в конце.

Во-первых, нам нужно сделать это палиндромом. Очевидное решение этого - добавить комментарий и поместить туда исходный код в обратном порядке. Это довольно просто, потому что CJam использует e#для комментариев, а в GolfScript eвообще ничего не делает и #является комментарием. Так что, если мы добавим, e#...что работает для обоих языков. Вот что у нас есть:

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

Конечно, это на самом деле не печатать часть e#вперед. Мы можем восстановить это довольно легко из самого исходного кода. Оба языка могут превратить начальный блок в строку с `и добавить "0$~"часть +, так что мы получаем весь исходный код без зеркального отражения в одной строке. Чтобы добавить зеркальную копию, все, что нам нужно сделать, это 0$снова продублировать строку, а затем перевернуть ее -1%, что также работает на обоих языках. Итак, теперь у нас есть это:

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

Это действительная палиндромная квинна в CJam, и она также работает в GolfScript, но все еще печатает этот отвратительный конечный перевод строки.

Обычный способ предотвратить это - присвоить пустую строку n, потому что на самом деле GolfScript печатает содержимое nв конце. Так что нам нужно "":n. Так что насчет CJam? К счастью, это ничего не делает. ""также является пустой строкой (или пустым списком, это то же самое в CJam) и :отображает оператор n(печать с переводом строки) поверх списка. Но поскольку список пуст, отображение оператора на него вообще ничего не делает. Следовательно, мы можем избавиться от перевода строки, не связываясь с CJam, и в итоге получить окончательное решение:

{`"0$~e#"+0$-1%"":n}0$~e##e~$0}n:""%1-$0+"#e~$0"`{
Мартин Эндер
источник
5

Perl 5 / Ruby / PHP / JavaScript (браузер), 4 языка, 513 байт

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

Попробуйте Perl онлайн!
Попробуйте онлайн!
Попробуйте PHP онлайн!
Подтвердите это онлайн!

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

Дом Гастингс
источник