Kubisch ist zu mühsam, um Code manuell . Ihre Herausforderung besteht darin, ASCII-Text in Cubically-Quellcode zu übersetzen.
Kubisch
Dies ist nur ein kurzer Überblick über Cubically. das Repository enthält eine ausführlichere Anleitung und Details.
Cubically ist ein Esolang, den ich vor einiger Zeit geschrieben habe und dessen Gebrauch schmerzhaft ist. Es enthält zwei Speicher, einen 3x3x3 Rubik's Cube und ein Register, das als "Notizblock" bezeichnet wird.
Erinnerung
Der interne Zauberwürfel wird folgendermaßen initialisiert:
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 down face
555
Nach einer 90 ° -Drehung im Uhrzeigersinn auf der rechten Seite sieht der Speicherwürfel folgendermaßen aus:
002
002
002
111225333044
111225333044
111225333044
554
554
554
Befehle
Ein nicht ganzzahliges Zeichen legt den Standardbefehl fest. Für jede Ganzzahl, bevor der Standardbefehl erneut festgelegt wird, wird der Befehl mit dieser Ganzzahl ausgeführt. Zum Beispiel x524y312
würde Befehl x
mit 5, dann mit 2, dann mit 4, dann Befehl y
mit 3, dann mit 1, dann mit 2 ausführen .
Die von den Befehlen verwendeten Ganzzahlen repräsentieren Flächenindizes. So funktionieren x0
würde x
auf dem UP (0 indiziert) Gesicht. x1
würde durchführenx
auf der linken (1-indizierten) Seite auftreten und so weiter.
Wenn Sie einen Befehl mit 6
ausführen, wird dieser Befehl für den Notizblockwert ausgeführt. Das Ausführen eines Befehls mit einer Ganzzahl über 6 führt zu einem Fehler.
Hier sind einige Beispielbefehle:
R1
- Drehen Sie die RECHTE Seite im Uhrzeigersinn um 90 °, damit der interne Würfel wie im zweiten Beispiel oben aussiehtR11
- Das RECHTE Gesicht zweimal um 90 ° im Uhrzeigersinn drehen, identisch mitR2
+0
- Fügen Sie alle Werte des UP-Gesichts zum Notizblock hinzu+000
- Fügen Sie alle Werte des UP-Gesichts dreimal zum Notizblock hinzu@6
- Drucken Sie das nicht vorhandene 6. indizierte Gesicht (Gedächtnis) als Zeichen%4
- Die Summe aller Werte auf der BACK-Seite als Ganzzahl ausgeben
Eine vollständige Liste der Befehle und der Syntax finden Sie im Repository .
Herausforderung
Sie nehmen ASCII-Text als Eingabe und drucken ein kubisches Programm als Ausgabe.
Beispiele (von hier und hier gestohlen ):
Input -> Output
Hello, World! -> +53@6+1F2L2+0@6L2F2U3R3F1L1+2@66L3F3R1U1B3+0@6:4U1R1+00@6-000@6*0-4+000@6-00@6+2-000000@6-5+4000@6-00@6/0+00@6:0+0/0+00@6
1$2$3$4$5$6$7$8$9$10$ -> B1+2/2%6@4+00/0%6@4+00/1%6@4+21/1%6@4+30/0%6@4+22/1%6@4+22/1%6@4+40/1%6@4+52/1%6@4+42/1%6@4
Regeln
- Ihr Programm enthält möglicherweise kein Wörterbuch mit den Übersetzungen für die 100 Testfälle.
- Ihr Programm muss in weniger als 180 Sekunden beendet sein (keine Brute-Force-Programme, die Wochen dauern).
- Ihr Programm muss gültigen kubischen Code ausgeben, der in weniger als 180 Sekunden beendet ist.
- Ihr Programm nimmt Eingaben über die Standardeingabe entgegen, es sei denn, Sie möchten sich mit dem Testtreiber anlegen.
- Ihr Programm muss kubischen Code ausgeben, der beim Ausführen nur die Eingabe Ihres Programms erzeugt. ಠ_ಠ
Wertung
Sie testen Ihr Programm mit 100 pseudozufälligen Zeichenfolgen von pseudozufälliger Länge. (Ein Bash-Skript wird mitgeliefert, das dies für Sie erledigt.) So werden Sie punkten:
- Die Länge des Ausgabeprogramms sei o .
- Die Länge der Eingabezeichenfolge sei l .
- Sei eine Variable r das Ergebnis von o / l .
- Finde den Durchschnitt aller r : (r 1 + r 2 + r ... + r 100 ) / 100 .
Testen Sie mit diesem Skript. Sie müssen es wie angewiesen ändern. Beachten Sie, dass das Programm nicht überprüft, ob die Ausgabe gültigen kubischen Code enthält. Wenn Sie das Skript nicht zum Laufen bringen können, kann ich Ihnen helfen. Ping mich in den kubischen Chatraum .
@6
- die Summe des nicht vorhandenen sechsten indizierten Gesichts (Notizblock) als Zeichen drucken" genauer? Ist %4
auch eine Summe? Sind +
Befehle Summenfläche, die dann zu allen Werten addieren oder ...?
@6
/ %6
druckt den Notizblockwert direkt als Zeichen / Ganzzahl. @x
/ %x
(wobei x für eine vorhandene Fläche steht) fügt alle Werte der x
indizierten Fläche hinzu und gibt die Summe als Zeichen / Ganzzahl aus. +
Fügt alle Werte auf dem angegebenen Gesicht zum Register hinzu.