99 ist eine Programmiersprache, die ich Anfang dieser Woche für meine Herausforderung erfunden habe. Schreiben Sie einen Dolmetscher für 99 . (Erfunden, aber dank eines halben Dutzend von Ihnen nie implementiert werden .;)) Die vollständige Sprachspezifikation befindet sich in dieser Herausforderung, sodass ich mich nicht die Mühe mache, alles hier erneut zu veröffentlichen.
In 99 können Sie einzelne ASCII- Zeichen nach Standard drucken. Aufgrund der Einschränkungen der Sprache ist jedoch nicht immer klar, wie ein bestimmtes Zeichen so präzise wie möglich gedruckt werden soll.
Schreiben Sie für jedes der 128 ASCII-Zeichen ein 99- Programm, das keine Eingabe benötigt und dieses einzige Zeichen ausgibt. Sie können einige oder alle dieser Antworten von Hand codieren oder ein anderes Programm (in einer beliebigen Sprache) schreiben, um sie für Sie zu generieren.
Die Summe der Zeichen in jedem Ihrer 128 99 Programme ist Ihre Punktzahl. Die niedrigste Punktzahl gewinnt. Zeilenumbrüche zählen als ein Zeichen.
Denken Sie daran, dass in 99 nur Variablen mit gerader Größe wie 9999
Ausgabe-ASCII-Zeichen (Variablen mit ungerader Größe Ganzzahlen ausgeben). Ihr Wert wird durch 9 geteilt und dann als Mod 128 verwendet, sodass die Werte nicht in einem bestimmten Bereich liegen müssen, um ASCII-Zeichen zugeordnet zu werden. Zum Beispiel entsprechen die internen Werte 297, 1449 und -855 alle dem Zeichen, !
denn wenn sie durch 9 geteilt und mod 128 genommen werden, werden sie alle zu 33, was der Zeichencode für ist !
.
Wenn Sie einen Interpreter für 99 benötigen , würde ich Macs Python-Antwort vorschlagen .
Ich weiß, ich sagte, meine nächste Herausforderung wäre interaktiver, aber ich arbeite immer noch an dem Zeug für diese.
quelle
Eine Vielzahl von Techniken, 42109
Anstatt das große ASCII-Zeichen zu berechnen, habe ich für die Zahlen nur den Wert der Zahl berechnet. Sie haben nur gesagt, dass Sie das Zeichen ausgeben können, daher sollte dies weiterhin funktionieren.BEARBEITEN: Die Zahlen wurden geändert, um die ASCII-Zeichen zu verwenden. Ignorieren Sie dies. Ich habe den ursprünglichen Nummerncode im Java-Code belassen, aber für den Fall, dass jemand ihn verwenden möchte, auskommentiert.
Einige davon habe ich von Hand gemacht, die meisten habe ich gerade geschrieben, um sie abzutippen.
Diese bestehen jeweils aus 1-4 Zeilen, so dass sie recht einfach zu kopieren und in ein Programm einzufügen sind. Es sollte beachtet werden, dass sie nicht nacheinander funktionieren, da mein generierter Code keine variablen Zustände beibehält.
Die hier am häufigsten verwendete Technik war die gleiche wie der Ansatz von orlp:
Meine Version unterscheidet sich durch die Verwendung einiger benutzerdefinierter Fälle und das Zusammenstellen eines Großteils der Mathematik in nur einer Zeile. Benutzerdefinierte Fälle sind nur Fälle, in denen das Zeichen mit nur ein paar Neunen dargestellt werden kann und keine Mathematik oder mein Generierungscode verkürzt werden kann.
Programme
Ich habe die Ausgabe auf Pastebin für diejenigen unter Ihnen eingestellt, die keine Lust haben, das Programm auszuführen:
http://pastebin.com/Cs6WZUfb
Java Code, den ich verwendet habe:
quelle
999
am Ende repariert werden.99 999\n99
(um es neu zuzuweisen999
,99
damit es als Zeichen gedruckt wird).Wiederholte Subtraktion, 65280
Eine triviale Lösung zum Vergleich. Subtrahieren Sie weiterhin 9 von 99 und geben Sie dann aus. Beispiel für ASCII-Zeichen 10:
Es gibt 128 Programme. Das erste Programm ist zwei Zeichen lang (99), jedes danach 8 Zeichen (99 99 9 \ n) länger als das vorherige.
Python-Programm, das durch Leerzeilen getrennte Programme generiert und Punktzahl berechnet:
quelle