Напишіть Palindrome-Polyglot-Quine


25

Напишіть "паліполіхін": програма, яка представляє собою квіну , поліглот та паліндром .

Правила:

  • Кількість поліглот-мов є більш кращим, ніж розмір коду.
  • Найкоротша відповідь (у байтах) виграє, якщо буде нічия.
  • Правила 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$, оскільки обидві мови мають оператора "copy-nth-item-on-stack" $. Таким чином, ми отримуємо {"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, але все ще друкує цей примхливий трейлінг linefeed.

Звичайний спосіб запобігти цьому - присвоїти порожній рядок 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$'=_$

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.