Schreiben Sie ein Programm, das bei Ausführung in verschiedenen Sprachen eine unterschiedliche Byte-Permutation des Codes in jeder Sprache ausgibt. Der genaue Quellcode wird als eine Permutation gezählt.
Hier kann "unterschiedliche Sprache" unterschiedliche Versionen (Py 2 und Py 3) oder unterschiedliche Standardflags sein. Es ist eine andere Ausgabe, die eine andere Version erzwingt.
Für das Programm gelten in jeder Sprache die richtigen Quine-Regeln. Ihre Punktzahl wird berechnet als (Language count)^6/(Code length in bytes)
, wobei eine höhere Punktzahl besser ist.
Stichprobe:
Wenn Ihr Code ist AAB
und in drei verschiedenen Sprachen zurückkehrt läuft ABA
, AAB
und AAB
dann ist seine Punktzahl 2^6/3
(nur eine der beiden AAB
Zählung). Es ist in Ordnung, wenn ABA
es bedeutungslos ist.
quelle
AAB
gedruckt wird , gehe ich davon aus, dass er als Sprache 1-Programm eine richtige Quine sein muss, und es gibt keine weiteren Einschränkungen hinsichtlich seiner Interpretation als ein Sprach-2-Programm. Ist das richtig?AAB
ABA
Antworten:
Befunge-98 , > <> , Gol> <> , Fission , Wumpus , Cardinal , Beeswax und Alice Score: 8 6 /88 = 2978,909
Probieren Sie es in Befunge! Probieren Sie es in> <>! Probieren Sie es in Gol> <>! Probieren Sie es in Fission! Probieren Sie es in Wumpus! Probieren Sie es in Cardinal! Probieren Sie es in Bienenwachs! Probieren Sie es in Alice!
Nachprüfung!
Viele 2D-Sprachen, die alle Wrapping-String-Literale missbrauchen. Die Leistungsunterschiede sind also:
> <>, Gol> <> und Befunge-98 alle Codes rückwärts ( mit Ausnahme des Druck
"
), mit den letzten drei Zeichen in verschiedenen Positionen,R*"
,O"*
und"R*
jeweils. Bienenwachs hat den Code auch rückwärts, aber die letzten drei Zeichen sind im ersten Abschnitt der Ausgabe eingestreut. Alice ist meistens rückwärts, mit Ausnahme aller entkommenen Zeichen ('
,\
und"
), die stattdessen nach vorne verschoben wurden.Wumpus ist das einzige tatsächliche Quine, Fission setzt das
"
am Ende des Codes anstelle des Anfangs und Cardinal setzt das"
zwischen das0
und das5
nahe am Anfang.Nachweis unterschiedlicher Permutationen
Erklärungen:
Befunge-98:
> <> und Gol> <>:
Um ehrlich zu sein, habe ich hier nicht viel gemacht. Der einzige Unterschied zwischen der Ausführung dieser beiden Sprachen ist der
@
Befehl, mit dem die drei obersten Werte des Stapels für jede Sprache auf unterschiedliche Weise gedreht werden.Fission:
Wumpus:
Kardinal:
Bienenwachs:
Alice:
quelle
Perl 5 , Rubin , JavaScript (Chrom), PHP , Python 2 , Python 3 , 1206 Bytes, Score 6 6 /1206 = 38,6865671641791
Validieren Sie Perl, Ruby, PHP, Python 2 und Python 3 online!
Hinweis : Wenn Sie das obige Programm in der Inspector-Konsole in Chrome ausführen (was anscheinend Positionsargumente unterstützt
console.log
), wird das richtige Programm zurückgegeben.Erläuterung
Das war viel länger als ich gehofft hatte und ich habe mein Leben auch ein bisschen schwieriger gemacht, also werde ich wahrscheinlich weiter daran basteln. Ich möchte auch weitere Sprachen hinzufügen, aber ich muss etwas finden, das kein
$
Siegel stört ...Das ist so ziemlich ein Standard quine Format , bei dem die Berechnung der Quote zu verwenden ein wenig anders für jede Sprache ist: in Ruby
%q&
verwendet wird, PHP Anwendungen'
, JavaScript (Node.js) nutzt`
und Perl 5 nutztq(
...)
. Da sich nur die Anführungszeichen ändern, ist der Rest des Programms weiterhin ausführbar und die Syntax in jeder Sprache gültig. Python 2 und 3 werden mit"""
Python 2 und'''
Python 3 um das vorherige Programm gewickelt .Die resultierenden Perl- und Ruby-Programme sind keine Standard-Quines. Bei jeder Iteration werden zusätzliche
q
/%q
s hinzugefügt, aber das erste Programm wird korrekt zurückgegeben.Die Ergebnisse sind:
eval($_=q&
...q&);printf($x=q&
...q&,
...);//#'%`'%`'%`'%`''''''''''''"""
...eval($_=%q&
...%q&);printf($x=%q&
...%q&,
...);//#`'`'`'`'''''''''''''"""
...eval($_=`
...`);printf($x=`
...`,
...);//#%q&'%q&'%q&'%q&'''''''''''''"""
...eval($_='
...');printf($x='
...',
...);//#`q&%`q&%`q&%`q&%''''''''''''"""
......
_="""
...""";
...q="""
...''''''''''''""";print(_.format(Q,_,q[0:-12]+R,"%"))
...
_='''
...''';
...q='''
...""""""""""""''';print(_.format(Q,_,q[0:-12]+R,"%"))
Ich habe das viel überarbeitet, ich hoffe, ich habe hier keinen Schlüssel verpasst. Ich habe noch einen weiten Weg vor mir, um in der Nähe von Jo Kings Punktzahl zu sein ...
quelle
Jelly und M , 2 6 /14 = 4,57
Probieren Sie es in Jelly!
Probieren Sie es in M!
Ɗṙ@ȮṾ1“Ɗṙ@ȮṾ1”
in Gelee1Ɗṙ@ȮṾ“1Ɗṙ@ȮṾ”
in M.quelle
Quine
in PHP?Python 2 und 3 Python , 2 6 /61 = 1,05
Probieren Sie es in Python 2 aus!
Probieren Sie es in Python 3!
Dank Jo King wurden 12 Bytes gespeichert.
Python 2 druckt
Python 3 druckt
Dies nutzt die Tatsache , dass
1/2
ist.5
in Python 3 und0
in Python 2.quelle
Heftiger Schlag / GolfScript, 72 Bytes, Score 2 6 /72 = 8/9 (~ 0,888 ...)
Enthält ein einzelnes Leerzeichen in den ersten beiden Zeilen.
Probieren Sie es online in Bash aus.
Probieren Sie es online in GolfScript aus.
Ändern Sie einfach die Antwort von @ jimmy23013 für die Herausforderung " Write a Polyquine " . Die Modifikation, die durchgeführt wurde , wurde das Entfernen der Leerzeichen nach der dritten Zeile, und Ändern
\n"+@n.;
zu\n "+@n;
.Bash druckt die Zeilen 1 und 2 folgendermaßen:
Und GolfScript druckt die Zeilen 1 und 2 folgendermaßen:
Hier werden die Basisprogramm-, Bash-Ausgabe- und GolfScript-Ausgaben jeweils durch die neuen Zeilen ersetzt durch
\n
:quelle