Schreiben Sie ein "Palipolyquin": ein Programm, das ein Quine , ein Polyglot und ein Palindrom ist .
Regeln:
- Die Anzahl der mehrsprachigen Sprachen ist der Codegröße vorzuziehen.
- Bei Gleichstand gewinnt die kürzeste Antwort (in Bytes).
- Polyglot- und Quine-Regeln finden Sie hier: Polyquine schreiben .
Mein Beispiel (ich habe ein Repository Freaky-Sources mit Tests):
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\///**/
code-challenge
quine
palindrome
polyglot
Ivan Kochurkin
quelle
quelle
1
(die hier1
in vielen Sprachen ausgegeben wird und palindrom ist).Antworten:
CJam / GolfScript , 2 Sprachen, 50 Bytes
Probieren Sie es aus CJam! Probieren Sie es in GolfScript!
Huh, das blieb überraschend lange unbeantwortet.
Erläuterung
Es ist wahrscheinlich am einfachsten, dies zu erklären, indem ich zeige, wie ich die Grundquine in jeder Sprache in eine palindromische polyglotte Quine verwandelt habe.
Die grundlegenden Quines in beiden Sprachen sind also:
In GolfScript bzw. CJam. Diese sind ziemlich ähnlich, da CJam ursprünglich von GolfScript inspiriert war (aber seitdem ziemlich stark davon abgewichen ist). Der erste Unterschied, den wir bemerken, besteht darin, dass einer
.
zum Duplizieren der Oberseite des Stapels und der andere zum Verwenden verwendet wird_
. Ein allgemeiner Trick, um dieses Problem zu vermeiden, ist die Verwendung0$
, da beide Sprachen den Operator "copy-nth-item-on-stack" haben$
. So bekommen wir{"0$~"}0$~
, obwohl das noch einen nachgestellten Zeilenvorschub in GolfScript braucht. Aber lassen Sie uns am Ende darüber nachdenken.Erstens müssen wir daraus ein Palindrom machen. Die naheliegende Lösung besteht darin, einen Kommentar anzufügen und den Quellcode dort in umgekehrter Reihenfolge abzulegen. Dies ist recht einfach, da CJam
e#
für Kommentare verwendet und in GolfScripte
überhaupt nichts tut und#
ein Kommentar ist. Wenn wir also anhängene#...
, funktioniert das für beide Sprachen. Folgendes haben wir:Das druckt das Teil natürlich nicht wirklich ab
e#
. Wir können dies recht einfach aus dem Quellcode selbst rekonstruieren. Beide Sprachen können den anfänglichen Block in einen String mit verwandeln`
und den"0$~"
Teil mit anhängen+
, so dass wir den gesamten nicht gespiegelten Quellcode in einem einzigen String erhalten. Um eine gespiegelte Kopie anzufügen, müssen wir den String nur noch0$
einmal duplizieren und dann umkehren-1%
, was auch in beiden Sprachen funktioniert. Jetzt haben wir Folgendes:Dies ist eine gültige Palindrom-Quine in CJam, und sie funktioniert auch in GolfScript, druckt aber immer noch diesen nervigen Zeilenvorschub.
Die übliche Möglichkeit, dies zu verhindern, besteht darin, eine leere Zeichenfolge zuzuweisen
n
, da GolfScript tatsächlich den Inhaltn
am Ende ausgibt . Also, was wir brauchen, ist"":n
. Was ist mit CJam? Zum Glück tut dies überhaupt nichts.""
ist auch eine leere Zeichenfolge (oder eine leere Liste, die in CJam identisch ist) und:
ordnet den Operatorn
(Drucken mit Zeilenvorschub) der Liste zu. Da die Liste jedoch leer ist, führt das Zuordnen eines Operators dazu überhaupt nichts. Daher können wir den Zeilenvorschub loswerden, ohne uns mit CJam herumschlagen zu müssen, und am Ende die endgültige Lösung finden:quelle
Perl 5 / Ruby / PHP / JavaScript (Browser), 4 Sprachen, 513 Bytes
Probieren Sie das Perl online!
Probieren Sie es online!
Probieren Sie das PHP online!
Online validieren!
quelle