Englisch für Ihren Chef kompilieren

16

Ihr Chef hat kürzlich von dieser interessanten Programmiersprache namens Englisch erfahren . Er hatte diese "revolutionäre" Idee, er möchte mit Ihnen zusammen programmieren, um die Produktionsraten zu verdoppeln! Da er kein versierter Techniker ist, möchte er, dass Sie einen Compiler dafür schreiben, damit er auch programmieren kann!

Jetzt sind Sie ein böser fauler Programmierer und werden offensichtlich kein Programm schreiben, um diese lächerlich komplexe Sprache zu kompilieren. Stattdessen stellen Sie sicher, dass der Code Ihres Chefs immer fehlerhaft ist, sodass er nie zur eigentlichen Kompilierung gelangt und Grammatikfehler nicht mehr korrigiert, sondern programmiert.

Die Herausforderung besteht darin, ein Programm zu schreiben, das vom Terminal ausgeführt werden kann und einen Dateipfad als Argument akzeptiert. Das Programm muss:

  1. Ändern Sie die Dateieingabe, indem Sie einen Tippfehler einfügen.
  2. Stellen Sie sich vor, die Kompilierung sei fehlgeschlagen, weil Sie auf den von Ihnen eingeführten Tippfehler gestoßen sind.
  3. Das Ausführen des Programms auf Kopien derselben Datei sollte nicht zweimal hintereinander denselben Tippfehler einführen.

Um die Herausforderung zu veranschaulichen, führen Sie Ihr Programm in dieser Datei aus:

Take an array as input.
Sort the array.
Output the array.

sollte etwas nach dem Vorbild von ausgeben

Error on line 1:
'Take an arqay as input.'
         ^
arqay is not a valid identifier.

und die Datei, die Sie dem Programm zum Kompilieren befohlen haben, sollte jetzt so aussehen:

Take an arqay as input.
Sort the array.
Output the array.

Hier einige Details zu den Programmspezifikationen:

Ihr Programm darf davon ausgehen, dass das Austauschen eines Zeichens in dem Programm, das Ihr Chef für ein anderes zufälliges Zeichen eingibt, einen Grammatikfehler verursacht. Ihr Programm sollte keine nicht alphabetischen Zeichen verwenden, um Fehler im Code Ihres Chefs zu erstellen. Ihr Chef würde niemals eine Zahl oder ein Symbol verwenden und herausfinden, dass etwas im Gange ist. Ihr Programm sollte nur die Wörter im Programm Ihres Chefs fehlerhaft wiedergeben. Ändern Sie nicht die Leerzeichen in den Sätzen oder die Interpunktion. Ihr Programm sollte den Fall des Programms, das Ihr Chef zu kompilieren versucht, nicht ändern, was bedeutet, dass Fehler wie arQayungültig sind. Dies verhindert Fehler wie " takeanstatt zu Takepassieren" oder " Arraystatt zu" array. Ihr Programm sollte den Fehler ausgeben, indem Sie zuerst angeben, in welcher Zeile sich der Fehler befindet:

Error on line <insert line number here>:

Es sollte dann die Zeile mit dem Fehler in 'Symbolen ausdrucken . In der nächsten Zeile sollte ein ^Symbol unter dem Wort stehen mit dem Fehler stehen und schließlich sollte es einen Text enthalten, der den Fehler beschreibt (dieser Teil liegt bei Ihnen, Sie können dort sagen, was Sie wollen, solange er einen Fehler beschreibt).

Sie können davon ausgehen, dass die Eingabedatei vorhanden und nicht leer ist. Sie können auch davon ausgehen, dass die Eingabedatei keine grammatikalischen Fehler enthält, bevor Sie eine hinzufügen.

Boni:

-60 Bytes , wenn die Fehler Code einleitet sind nicht völlig zufällig, sondern Typo-Basis wie in diesem Frage .

-60 Bytes für mindestens 5 verschiedene Fehlermeldungen, die sich zufällig abwechseln.

-60 Bytes, wenn Ihr Programm eine Chance von 1 zu 100 oder weniger hat, eine demotivierende Nachricht an Ihren Chef auszugeben.

BEARBEITEN: Die Byteanzahl der Nachrichten zählt nicht zu Ihrer Punktzahl. (Danke an Martin Büttner für diese gute Idee)

Dies ist Code-Golf, die kürzeste Anzahl an Bytes gewinnt. Bitte golfen Sie nicht mit dem Inhalt der Fehlermeldung, Ihr Chef wird sich nicht freuen, wenn er die Fehlermeldungen nicht versteht, und wird Sie bitten, sie für ihn zu beheben.

Rodolphito
quelle
Muss ich mich mit Zeilen befassen, die keine Buchstaben enthalten?
Urous
Sie können einen Tippfehler nur in alphabetischen Zeichen erstellen und davon ausgehen, dass es sich bei der Eingabedatei um eine gültige, nicht leere Datei handelt.
Rodolphito
7
Ich bin kein Fan davon, die Fehlermeldungen uns zu überlassen. Selbst wenn wir die Fehlermeldung "nicht golfen", könnten sie immer noch eine Handvoll Bytes unterscheiden, wahrscheinlich sogar zwei Dutzend, wenn wir den zweiten Bonus anstreben. Das kann ziemlich viel sein. Ich denke, für einen fairen Golfwettbewerb sollten Sie 5 Fehlermeldungen und eine demotivierende Meldung angeben oder die Länge der Zeichenfolgen von der Byteanzahl subtrahieren.
Martin Ender
Vielen Dank für den Tipp, ich hatte mir überlegt, ob ich vordefinierte Nachrichten haben soll, aber ich wollte damit ein bisschen mehr Freiheit geben. Es ist eine gute Idee, die Anzahl der Nachrichtenbytes von der Punktzahl zu subtrahieren.
Rodolphito

Antworten:

3

TI-BASIC, 77 - 34 (Fehlertext) = 43

Für den Fall, dass er in seinen TI-83/84-Rechner will;)

Als Standard für Funktionen sollte die Dateizeichenfolge enthalten sein, Ansdamit sie die Ausgabe zurückgeben und anzeigen kann.

Ans->Str1:If 1=inString(Ans,"A
Then:"B
Else:"A
End:Disp "ERROR ON LINE 1","'"+Ans+sub(Str1,2,-1+length(Str1))+"'"," ^ INVALID

Beachten Sie, dass viele Token ein Byte sind.

Timtech
quelle
Wo könnte ich diesen Code ausführen?
Rodolphito
TI-83/84 Rechner oder ein Emulator für einen.
Timtech
inString, Ans, sub, Else, Then, End, Disp , Str1... sind nicht alle , 1 Byte für den Rechner?
Ismael Miguel
4
WAS????????????????? Das ist so, als würde man sagen, dass 8 Bits nicht 1 Byte sind !!!!!!!!! Wenn ich einen Code in Assembly in binärer Form präsentiere, werden die Bytes dann auch als 1 Makro von mehr als 5 Bytes gezählt? Das ist doch klar dumm! (Entschuldigen Sie die starken Worte, aber es ist wirklich dumm!) Dies repräsentiert nicht Ihren Code. Ich meine, Ansist nicht dasselbe wie das von dargestellte Byte Ans. Der eine A*n*sliefert jedes vom Taschenrechner gewünschte Ergebnis, der andere gibt den Wert des letzten arithmetischen Ausdrucks zurück. In Anbetracht dessen denke ich, dass das Nicht-Akzeptieren der REAL- Zählung dazu führt , dass der Code falsch dargestellt wird.
Ismael Miguel
5
Die Datei scheint nicht zufällig geändert zu werden, es sieht so aus, als würde in Zeile 1 immer eine Änderung angezeigt, und der erste Buchstabe wird in B geändert, wenn A, oder in A, wenn nicht.
Rodolphito