Ihre Aufgabe ist es, das kürzeste Programm (A) zu erstellen, das ein anderes Programm (B) mit den eindeutigsten Bytes ausgibt, das wiederum das ursprüngliche Programm (A) ausgibt. Im Wesentlichen spielen Sie eine Hälfte eines Ouroboros-Programms (auch bekannt als periodisch iterierendes Quine) und bowlen die andere Hälfte. A und B können in verschiedenen Sprachen sein.
Regeln und Wertung
Ihre endgültige Punktzahl ist <number of unique bytes in B> / <number of bytes in A>
. Höchste Punktzahl gewinnt. Es ist zu beachten, dass die theoretische Höchstpunktzahl 256 beträgt.
- Programm A muss mindestens ein Byte lang sein
- Programm B kann nicht vollständig aus No-Ops bestehen, dh mindestens ein Zeichen muss die Ausgabe in irgendeiner Weise beeinflussen.
- Für beide Programme gelten die Standardregeln für Quines . Insbesondere sind Fehlerquines in beiden Fällen nicht zulässig.
Um die Konsistenz des Antwortformats zu gewährleisten, beginnen Sie Ihre Antwort mit etwas ähnlichem:
# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>
code-golf
code-challenge
quine
code-bowling
Beefster
quelle
quelle
aaaaa
ein eindeutiges Byte undabcde
hat 5 eindeutige Bytes.Antworten:
Japt & Japt , Score: 255/38 = 6,71
Programm A :
Programm B ist über 8 KB lang, so lange, dass die Verknüpfung unterbrochen wird, sodass ich das Ganze nicht einfügen werde. Hier ist ein Beispiel:
Ich konnte keinen Weg finden, ein
NUL
Byte zum Laufen zu bringen, weshalb Programm B nur 255 eindeutige Zeichen enthält. Programm B besteht im Wesentlichen aus 255 Kopien eines einzelnen Programms, wobei jedes Mal ein einzelnes irrelevantes Byte geändert wird und die ersten 254 Ausführungen ignoriert werden.Zur Erklärung beginne ich mit dieser vereinfachten Version von A, damit das resultierende B leichter zu diskutieren ist.
Dieses Programm basiert auf dem Basis-Japt-Quine, der für Nutzdaten geeignet ist . Die Zeichenfolge am Anfang enthält ein Duplikat des restlichen Programms,
iQ ²
fügt ein Zitat und Duplikate ein, um eine Zeichenfolgendarstellung des gesamten Programms zu erstellen, und¯23
schneidet dann sich selbst und alles danach ab. Die resultierende Zeichenfolge ist ein Programm, das Programm A ausgibt :Ich werde diese Zeichenfolge als bezeichnen
U
.Die letzte Zeile von A dupliziert
U
einige Male mit jeweils einer kleinen Änderung. Genauer gesagt, für jede ZahlX
in dem Bereich[1...3]
gibt es ,"#c" + U
wennc
das Zeichen mit charCode istX
. Das Standardverhalten von Japt ist die Ausgabe dieser Zeichenfolgen ohne Anführungszeichen und durch Kommas getrennt. Dies ist also die Ausgabe unseres vereinfachten A (beachten Sie, dass zwischen jedem#
und"iQ
:Wir werden diese nennen Simplified B .
Vereinfachtes B hat eine einfache Struktur, die zwischen
#c
und wechseltU
. Zum Glück für diese Antwort wird jedes#c
undU
als durch ein Komma getrennt behandelt, und in dieser Situation hat das Verhalten von allem außer dem allerletztenU
keine Auswirkung auf die Ausgabe. Der einzige Teil von Simplified B, der sich auf die Ausgabe auswirkt, ist folgender:Das ist identisch mit dem
U
, was wir bereits wissen. Outputs Simplified A.Der einzige Unterschied zwischen "Vereinfachtes A" und "Programm A" besteht darin, dass
[1...3]
das echte Programm keine Kopien für den Bereich erstellt , sondern Kopien für den Bereich[1...256]
. Das führt zu 256 Versionen, von denen#c
jede ein anderes Zeichen hat, obwohl die letzte Version "Ā" ein Mehrbytezeichen ist, sodass keine eindeutigen Bytes hinzugefügt werden, aber alles außer dem letztenU
wird weiterhin ignoriert.quelle
27
muss immer dann angepasst werden, wenn Bytes gespeichert werden, aber ansonsten scheint es so, als ob es funktioniert.Programm A, Gol> <> , 256/20 Bytes = 12,8
Probieren Sie es online!
Programm B, Gol> <>
Probieren Sie es online!
Das Programm gibt sich abwechselnd aus, gefolgt von jedem Byte, und gibt sich nur aus.
Erläuterung:
quelle
Programm A: 05AB1E , Score:
256/41256/31 Bytes = 8,258 ...Probieren Sie es online aus.
Programm B: 05AB1E
Probieren Sie es online aus.
Erläuterung:
Die kürzeste Quine für 05AB1E ist diese:
0"D34çý"D34çý
( 14 Byte ) bereitgestellt von @OliverNi . Meine Antwort verwendet eine modifizierte Version dieser Quine durch Hinzufügen₅Ýç'q†vy27ǝD}J
.Programm B wird beendet, sobald es
q
das Programm erreicht. Das aktuelle Programm B lautet also:Alles danach wird ignoriert und der Anfang des Stacks (
0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ
) wird implizit ausgegeben.quelle