Napisz „palipoliquine”: program, który jest quine , poliglotą i palindromem .
Zasady:
- Liczba języków polyglot jest bardziej preferowana niż rozmiar kodu.
- Najkrótsza odpowiedź (w bajtach) wygrywa w przypadku remisu.
- Zasady Polyglot i Quine patrz tutaj: Napisz Polyquine .
Mój przykład (mam repozytorium Freaky-Sources z testami):
C # / Java (1747 bajtów):
/**///\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\///**/
code-challenge
quine
palindrome
polyglot
Ivan Kochurkin
źródło
źródło
1
(które wyświetli się1
w wielu językach i jest palindromiczne).Odpowiedzi:
CJam / GolfScript , 2 języki, 50 bajtów
Wypróbuj CJam! Wypróbuj w GolfScript!
Huh, to zaskakująco długo trwało bez odpowiedzi.
Wyjaśnienie
Prawdopodobnie najłatwiej to wytłumaczyć, pokazując, jak zamieniłem podstawowy quine w każdym języku na palindromiczny poliglotyczny quine.
Podstawowe quiny w obu językach to:
Odpowiednio w GolfScript i CJam. Są one dość podobne dzięki temu, że CJam został pierwotnie zainspirowany przez GolfScript (ale od tego czasu sporo się zmienił). Pierwszą różnicą, którą zauważamy, jest to, że jedna wykorzystuje
.
do powielania góry stosu, a druga używa_
. Częstym sposobem uniknięcia tego problemu jest użycie0$
, ponieważ oba języki mają operator „kopiuj n-ty-element na stosie”$
. Tak więc otrzymujemy{"0$~"}0$~
, chociaż nadal wymaga to końca wiersza w GolfScript. Ale martwmy się o to na końcu.Po pierwsze, musimy uczynić z niego palindrom. Oczywistym rozwiązaniem tego jest dodanie komentarza i odwrócenie kodu źródłowego. Jest to dość proste, ponieważ CJam używa
e#
komentarzy, aw GolfScripte
nic nie robi i#
jest komentarzem. Jeśli dodamye#...
, działa to dla obu języków. Oto, co mamy:Oczywiście to nie drukuje części od początku
e#
. Możemy to dość łatwo zrekonstruować z samego kodu źródłowego. Oba języki mogą przekształcić blok początkowy w ciąg znaków`
i dołączyć do niego"0$~"
część+
, dzięki czemu otrzymamy cały nieznany kod źródłowy w jednym ciągu. Aby dołączyć kopię lustrzaną, wystarczy zduplikować ciąg0$
ponownie, a następnie odwrócić go-1%
, co działa również w obu językach. Więc teraz mamy to:Jest to poprawna palindromiczna quine w CJam, działa również w GolfScript, ale nadal drukuje to irytujące końcowe podawanie linii.
Zwykłym sposobem, aby temu zapobiec, jest przypisanie pustego łańcucha
n
, ponieważ tak naprawdę GolfScript naprawdę drukuje zawartośćn
na końcu. Więc potrzebujemy"":n
. A co z CJamem? Na szczęście nic to nie robi.""
jest również pustym ciągiem (lub pustą listą, są takie same w CJam) i:
mapuje operatoran
(drukuj z podawaniem liniowym) na liście. Ale ponieważ lista jest pusta, odwzorowanie nad nią operatora nic nie robi. W ten sposób możemy pozbyć się kanału, bez bałaganu w CJam, i ostatecznie otrzymać ostateczne rozwiązanie:źródło
Perl 5 / Ruby / PHP / JavaScript (przeglądarka), 4 języki, 513 bajtów
Wypróbuj Perl online!
Wypróbuj online!
Wypróbuj PHP online!
Sprawdź to online!
źródło