Ich habe ein Programm, das formatierten Brainfuck-Code generiert. Ich führe mein Programm aus
./example "S"
und die Ausgabe ist
+[>+
<
+++
]
>--.
welches S in Brainfuck druckt.
Ihr Ziel ist es, ein Programm zu schreiben, das eine Zeichenfolge als Eingabe akzeptiert und Quellcode in einer anderen Sprache ausgibt, die diese Zeichenfolge druckt.
- Der von Ihrem Programm ausgegebene Quellcode muss so formatiert sein, dass er die Zeichenfolge in ASCII-Grafik darstellt (horizontal und nicht vertikal gedruckt).
- Der Quellcode kann die Zeichenfolge nicht enthalten (er kann jedoch Buchstaben enthalten, die in der Zeichenfolge vorkommen, nur nicht nacheinander).
Andernfalls,
- Es gelten Standardlücken .
- Der kürzeste Code gewinnt.
Bitte benennen Sie Ihre Einreichung mit der Sprache, in der sie geschrieben wurde, der Sprache, in der sie ausgegeben wird, und der Gesamtgröße in Bytes. Bitte geben Sie die Ausgabe Ihres Programms an, wenn Sie die Zeichenfolge UNCOPYRIGHTABLE eingeben.
Vielen Dank!
Antworten:
C -> Brainfuck 556 Bytes
Ausschluss unnötiger Leerzeichen. Ich könnte leicht weitere hundert speichern, indem ich die Schriftdaten
d[]
von hex in eine Zeichenfolge in Anführungszeichen ändere.Dies verwendet eine Taschenrechnerschriftart (für niedrige Entropie nur ein Byte pro Buchstabe) und einen sehr naiven Brainfuck-Compiler, der von https://codegolf.stackexchange.com/a/35801/15599 inspiriert ist (außer ich verwende Plus statt Minus) Die erste
for
Schleife kompiliert den Text ina
die Zeichenfolgeb
und berechnet anhand der 13-stelligen magischen Hexadezimalzahl (alle Zeichen sind 5-8 Striche) die Anzahl der Striche, die zum Zeichnen des formatierten Codes erforderlich sind.Angesichts der Gesamtprogrammlänge und der Strichzahl wird die Anzahl der Zeichen pro Strich berechnet (dies kann sehr klein sein, wenn die Zeichen gleich oder in aufsteigender Reihenfolge sind, und sehr groß, wenn die Zeichen in absteigender Reihenfolge sind.)
Der größte Teil des restlichen Programms widmet sich der Entscheidung, ob Leerzeichen oder einer der Striche gedruckt werden müssen. Befindet sich der Cursor über einem Strichquadrat, wird die Funktion
f
mit der Nummer dieses Strichs als Argument aufgerufen. Es gibt ein Leerzeichen zurück, wenn dieser Strich für den aktuellen Buchstaben nicht erforderlich ist, oder ein Zeichen aus dem Programm, wenn dies der Fall ist. Da die Anzahl der Zeichen, die zum Vervollständigen der ASCII-Grafik erforderlich sind, möglicherweise größer ist als die Zeichen im Programm, wird gelegentlich ein Leerzeichen eingefügt, daher die Berechnungb[i * v/u]
.Die Schrift enthält vier Einzelstriche und vier Doppelstriche, die wie folgt nummeriert sind und je nach Buchstabe entweder vorhanden oder nicht vorhanden sind.
Ausgabe
Test unter http://copy.sh/brainfuck/
ABC
DEF
GHIJK
LMNOP
QRSTU
VWXYZ
KOPIERBAR
Bei den meisten Zeichenfolgen mit Buchstaben in zufälliger Reihenfolge (nicht aufsteigend) ist die Buchstabengröße viel größer und die Buchstaben sehen viel besser aus. Leider werden die Dateigrößen ziemlich groß. Ich kann hier nicht das vollständige Wort UCOPYRIGHTABLE hochladen. COPYABLE ist ungefähr das längste Wort, das mir erlaubt ist.
quelle
Perl → Befunge, 868 Bytes
OK, ich werde den Ball ins Rollen bringen. Dies könnte ein bisschen mehr Golf gespielt werden, aber mein Kopf fängt an zu schmerzen ...
Beispiele:
Die kürzeren Beispiele können in Online-Dolmetscher wie diesen kopiert werden , aber UNCOPYRIGHTABLE scheint zu einem Programm zu führen, das für alle Online-Dolmetscher zu lang ist.
Hinweis:
Das
@
Zeichen am Ende der ersten Ausgabezeile weist Befunge an, die Ausführung zu beenden. Ohne sie würde das Programm das gleiche Wort für immer wiederholen.quelle
C → Brainfuck, 855 Bytes
Einige Zeilenumbrüche wurden hinzugefügt, um die Lesbarkeit zu verbessern. Beachten Sie, dass Kleinbuchstaben und Symbole fehlerhaft sind. Testen Sie die Ausgabe hier .
Beispiele
Auf einem Terminal sieht es viel besser aus :(
Und schlussendlich,
quelle