Ziel ist es, ein Programm zu schreiben, das ein anderes Programm (Eingabe) mit möglichst wenig Zeichen codiert.
Wertung
- Die Punktzahl entspricht der unterschiedlichen Anzahl von Zeichen, die für die Ausgabe benötigt werden.
- Niedrigere Punktzahl ist besser.
Regeln
- Keine Zielsprachen mit einer begrenzten Anzahl von Befehlen. (Kein Brainf ** k, Whitespace usw.)
Bearbeiten : Ich meine mindestens 26 signifikante Zeichen,A
ändert nichts an der Funktionsweise eines Brainf ** k-Programms, daher können Sie dieses Zeichen nicht zählen. Gleiches gilt für Whitespace. - Die Zielsprache muss zu dem Zeitpunkt existieren, an dem diese Frage geschrieben wird.
- Sie müssen eine kleine Erklärung hinzufügen, wie Sie Ihre Partitur archivieren.
- Das Eingabeprogramm ist gültig.
- Das codierte Programm muss ein gültiges Programm in derselben Sprache wie die Eingabe sein.
- Das codierte Programm muss den gleichen Job wie das ursprüngliche Programm ausführen.
- Ihr Encoder muss für jedes gültige Programm in dieser Sprache funktionieren.
- Fügen Sie einige Beispieleingaben und -ausgaben hinzu.
Anmerkungen
- Der Encoder kann in einer beliebigen Sprache geschrieben sein, nicht nur in der Sprache, auf die er abzielt.
- Dies ist kein Code-Golf , lesbare Programme werden empfohlen.
- Das große Ziel ist zu sehen, wie viele verschiedene Zeichen benötigt werden, um etwas in dieser Sprache zu schreiben. Ich habe BF usw. abgelehnt, weil es keine Herausforderung geben würde.
- Dies wurde inspiriert durch Drucken einer Zeichenfolge mit möglichst wenigen unterschiedlichen Zeichen . Sie können diese als Metagolf für diese Frage verwenden.
Beispiel
In Java können Sie \uXXXX
stattdessen andere Zeichen verwenden. Ein gültiger Eintrag codiert jedes Zeichen aus der Eingabe auf diese Weise. Dies hätte eine Punktzahl von 18. ( \ 0-9a-f
)
Code in Tcl, codiert ein Java-Programm:
set res {}
foreach char [split [read stdin] {}] {
append res [format \\u%04x [scan $char %c]]
}
puts $res
atomic-code-golf
generation
metagolf
Johannes Kuhn
quelle
quelle
gets
lese aber nicht nur eine einzige Eingabezeile? Und du hast denu
in deinem Encoder verpasst (aber andererseits brauchst du keinen Platz und somit bleibt die Punktzahl gleich).Antworten:
GolfScript / GolfScript, Note 4
Der Encoder selbst ist ein GolfScript-Programm, das den Originalcode von STDIN in eine Folge von Zeichen umwandelt
',+~
. Diese Ausgabe selbst ist ein gültiger GolfScript-Code, der dieselben Vorgänge ausführt wie die ursprüngliche Version.Die grundlegende Methode besteht darin, den Code als Zeichenfolge zu codieren (Zeichen
',+
, siehe unten) und diese Zeichenfolge dann mit dem Befehl eval auszuwerten~
.Wenn man in GolfScript eine beliebige Zeichenfolge mit einem Array von Zahlen verknüpft, werden die Zahlen in Codepunkte konvertiert und das Ergebnis ist eine Zeichenfolge. Daher erstellt die Zeichenfolgencodierung einfach eine Liste von Zahlen (aus den Codepunkten des Eingabecodes) und verkettet dann alle diese mit einer leeren Zeichenfolge.
Beispiel:
Der eingegebene Code
wird übersetzt in (Hinweis: Zeilenumbrüche und Kommentare zur besseren Lesbarkeit hinzugefügt)
quelle
Python -> Python, 8 verschiedene Zeichen
Dies verwendet Modulo-Formatierung, um die Eingabezeichenfolge neu zu erstellen. Beispielsweise
print 1
ergibt sich in diesem Programm:Theoretisch können Sie jedes Programm wie dieses codieren, aber das resultierende Programm hat immer mehr als 2 n Zeichen, wobei n die Anzahl der Zeichen in der Eingabe ohne
%
Symbole ist.quelle
2**n+3*n-1 + 6
Zeichen, einschließlich aller eingegebenen Zeichen (wenn Sie annehmen, dass jedes Zeichen ein NUL-Byte ist). Dies stammt aus OEIS A132074 , plus 6 fürexec''
. Wenn Sie davon ausgehen, dass Zeichen in ASCII gedruckt werden müssen, ist die untere Grenze höher. repl.it/EHENCJam -> CJam, Ergebnis: 3
CJam ist neuer als die Frage und kann daher nicht gewinnen.
Es nutzt
')~
.')
ist das Zeichen)
, und jedes zusätzliche)
erhöht es um eins.~
kann ein Zeichen oder eine Zeichenkette auswerten. Das komplette Programm wird nach Verkettung aller Zeichen durch Auswertung ausgewertet+
. Für jedes Zeichen, das kleiner als ist, wird eine Ganzzahl aus dem Zeichenwert und einer Zahl-zu-Zeichen-Operation ausgewertet)
.Beispiele
wird übersetzt in:
und
wird übersetzt in:
quelle
APL (Punktzahl: 10)
Zeichen, die bei der Kodierung verwendet werden:
⍎⎕AV[(⍴⍬)]
Das zu codierende APL-Programm muss sich auf den APL-Zeichensatz beschränken und darf keinen zusätzlichen Unicode verwenden.
Kodierung für das Programm
42
(das die Antwort auf das Leben, das Universum und alles ausgibt):Wie es funktioniert:
⍬
Ist die leere Liste,⍬⍬⍬⍬
ist also eine Liste von vier leeren Listen,⍴⍬⍬⍬⍬
ist die Länge der Liste von vier leeren Listen, also vier. Dyadic⍴
ist eine Umformung, daher müssen die Anweisungen für die Länge der Liste der Listen in Klammern gesetzt werden(⍴⍬⍬⍬⍬)
.Diese Zahlen werden dann nach
⎕AV
dem Zeichensatz durchsucht und führen⍎
die resultierende Zeichenfolge aus.(Auf den ersten Blick sieht es so aus, als könnte die Punktzahl mit auf 9 gebracht werden
⎕UCS
anstelle von⎕AV
und Speichern[]
, aber das funktioniert nicht, da(⍴⍬)(⍴⍬)
es sich um eine Liste von Skalarlisten handelt, dh[[1], [1]]
anstelle der Liste[1, 1]
, die erforderlich wäre, und dies umgeht würde erfordern, die codierten Werte mit Kommas zu vertauschen, um die Punktzahl wieder auf 10 zu bringen.)quelle
RProgN , 7 verschiedene Zeichen, nicht konkurrierend
RProgN ist neuer als diese Frage.
' do.Lc
Konvertieren Sie das Programm in
'oooo...' L c 'ooooo...' L c 'oo...' L c . . . do
, wobei jedes 'oo ...' den Zeichencode in o darstellt, der von Apostrifikaten umgeben ist, um daraus einen String zu machen. L c wandelt sie dann in eine Zahlenkonstante um. Nachdem alle Zeichenfolgen auf dem Stapel abgelegt wurden, entspricht eine Kette von. Der Anzahl der Zeichen in der codierten Zeichenfolge abzüglich einer Neuerstellung der codierten Zeichenfolge und führt sie aus.Encoder, auch in RProgN geschrieben.
Probieren Sie es online!
quelle
Rubin -> Rubin, 8
Stichprobe:
Implementiert die im verknüpften Problem angegebene Ruby-Lösung und ersetzt I / O durch eval.
quelle