Tor
Ersetzen Sie alle Kommentare in C, C ++ oder Java Code durch den Kommentar // Do the needful
.
Besonderheiten
Diese Codierungsherausforderung ist einfach. Nehmen Sie als Eingabe den Namen einer Datei. Die Eingabedatei muss C-, C ++ - oder Java-Code enthalten. Der Code muss einen oder mehrere Kommentare enthalten. Die Kommentare können einzeilig /* */
oder //
begrenzt sowie mehrzeilig /* */
begrenzt sein. Die Ausgabe des Programms sollte mit der Eingabe identisch sein, außer dass alle Kommentare in konvertiert werden sollten // Do the needful
.
Zum Beispiel, wenn die Eingabedatei lautet:
#include <iostream.h>
int result; // the result of the calculations
char oper_char; // the user-specified operator
int value; // value specified after the operator
/* standard main function */
int main()
{
result = 0; // initialize the result
// Loop forever (or till we hit the break statement)
while (1) {
cout << "Result: " << result << '\n';
/* This code outputs display and requests
input from the user */
cout << "Enter operator and number: ";
cin >> oper_char;
cin >> value;
if (oper_char = '+') {
result += value;
} else {
cout << "Unknown operator " << oper_char << '\n';
}
}
return (0);
}
Die Ausgabe des Programms sollte lauten
#include <iostream.h>
int result; // Do the needful
char oper_char; // Do the needful
int value; // Do the needful
// Do the needful
int main()
{
result = 0; // Do the needful
// Do the needful
while (1) {
cout << "Result: " << result << '\n';
// Do the needful
cout << "Enter operator and number: ";
cin >> oper_char;
cin >> value;
if (oper_char = '+') {
result += value;
} else {
cout << "Unknown operator " << oper_char << '\n';
}
}
return (0);
}
Wertung
Dies ist ein Beliebtheitswettbewerb. Sie erhalten zwei zusätzliche Stimmen zu Ihrer Punktzahl hinzugefügt, wenn in keinem Fall eines der folgenden Wörter in Ihrem Programm erscheint : {"do", "the", "needful"}
. Die Punktzahl ist die Anzahl der Stimmen plus ggf. der Bonus.
Zulagen
Wenn Kommentare in Zeichenfolgenliteralen angezeigt werden, können sie auch in konvertiert werden // Do the needful
. Immerhin ... kann man nie genug Bedürftiges haben.
quelle
"d" + "o"
kann ? Außerdem hat die Vorlage der Lage sein , zu behandeln jeden gültigen C, C ++ oder Java - Code? Das ist ziemlich hart und läuft darauf hinaus, einen Lexer für alle drei Sprachen zu schreiben (ich denke über Kommentarliterale in Strings nach und umgekehrt). Wenn ja, was ist mit Lexerbibliotheken von Drittanbietern?"t" + "he"
"need" + "ful"
/* ... */
vor einem Nichtkommentar in einer Zeile steht?char str[]="/**///";
eine Kommentar-Startsequenz/*
in einem/*
Kommentar oder eine Backslash-Newline in einem//
Kommentar oder ein//
Kommentar in einem/**/
Kommentar angezeigt wird ?Antworten:
CoffeeScript (66 Bytes)
Dieser Code analysiert Zeichenfolgen, aber es gibt einen guten Grund. Sie sehen, es besteht die Möglichkeit, dass eine Vorlage einen Kommentar enthält, der C-
/**/
Kommentare generiert .Dieser bekommt den Bonus, da es genaue Groß- und Kleinschreibung Treffer für vermeidet
Do
,the
undneedful
. Es verwendet auch den ES5-[^]
Operator candle ( ), um Dinge zu erledigen. Ich würde einen KommentarDo the needful
in dieses Programm einfügen, aber das würde den Bonus entfernen.quelle
Perl, 68 Zeichen
Dies erfordert einige Freiheiten bei der Spezifikation und behält den ursprünglichen Kommentarstil bei. Dadurch wird das Problem vermieden, dass
/* ... */
Kommentare vor dem Zeilenende angezeigt werden.Es wird kein Versuch unternommen, Kommentare in String-Literalen zu vermeiden, und es wird kein Anspruch auf die Bonuspunkte erhoben.
quelle
/* ... */
Kommentar vor dem eigentlichen Code steht (Sie können ihn nicht naiv in einen//
Kommentar umwandeln ).Perl
Erste Welt Anarchie! :) :)
"Man kann nie genug Bedürftiges haben"
quelle
Python 3.x, Regex
Da es kein Code-Golf ist, habe ich mich nicht um die Code-Länge gekümmert. Nichts Beeindruckendes, aber ich hatte Spaß daran, mich an die Grundlagen von Regex zu erinnern / sie neu zu lernen.
quelle
sed, 90 Zeichen
Könnte verbessert werden. Dabei habe ich viel über sed gelernt.
Liest von der Standardeingabe, die Ausgabe zur Standardausgabe. Nimmt eine gültige Eingabe an. Wenn Sie nicht abgeschlossene Kommentare haben, wird diese nicht als Kommentar behandelt.
Getestet auf GNU sed v4.2.2.
Und der Preis für Lesbarkeit geht an ....?
Einzeiler-Version:
Erläuterung
Der Kontrollfluss springt mithilfe von GOTO-Anweisungen viel herum (ja, sed hat sie!). sed hat keine Schleifen oder bequemen bedingten Anweisungen AFAIK.
quelle
BrainFuck
Ja, BrainFuck ist eine Turing-vollständige Sprache.
Viel Glück beim Verständnis dieses Codes.
Grundsätzlich lautet der Pseudocode:
Einige Online-Dolmetscher sind kaputt.
Versuchen Sie es hier mit dem Beispiel des OP (endete mit null-char , um die Schleife richtig zu unterbrechen):
quelle
Rebol
Es ist kein Code Golf, also werde ich wortreich sein.
(Hinweis: Aus politischen Gründen drücke ich hier auf COMBINE, aber es ist noch nicht Standard . Wenn Sie dies also tatsächlich ausführen möchten, verwenden Sie REJOIN. Aber ich hasse REJOIN. Eine Warze in einer ansonsten schönen Sprache! Sagen Sie Ihrer freundlichen Nachbarschaft Red dev führt dazu, mir zuzuhören. Danke.)
PARSE ist ein Dialekt oder eine Sprache innerhalb einer Sprache in Rebol und Rot. Es verdreht die Dinge, so dass zum Beispiel die Symboltypen, die für die Zuweisung verwendet werden (das
terminator:
Interminator: newline
), eine neue Bedeutung bekommen, wenn sie im Code-as-Data-Paradigma verwendet werden ... es speichert die aktuelle Analyseposition in einer Variablen mit diesem Namen . Lesen Sie hier mehr darüber, warum es cool ist .UPDATE: Oh alles klar, ich werde es auch spielen. In Rebmu 72 Zeichen ... mit rebmu / args, das A als Argument einfügt:
pa DtsRDa[anTO["/*"(T"*/")|"//"(Tlf)]SthT F(chpS"// Do the needful^/"f)]d
Genau das gleiche Programm.
quelle