Anfang dieser Woche haben wir gelernt, wie man esoterische Sprachen zum Kommentieren formatiert . Heute machen wir das Gegenteil davon. Sie müssen ein Programm oder eine Funktion schreiben, die gut kommentierten esoterischen Code analysiert und die Kommentare auswertet, wobei nur der Code zurückgegeben wird. Anhand einiger Beispiele aus der vorherigen Herausforderung sehen Sie hier, wie gut kommentierter Code aussieht:
a #Explanation of what 'a' does
bc #Bc
d #d
e #Explanation of e
fgh #foobar
ij #hello world
k #etc.
l #so on
mn #and
op #so forth
Folgendes müssen Sie tun, um den Code zu extrahieren. Entfernen Sie zuerst das Kommentarzeichen ( #
), das Leerzeichen davor und alles nach dem Kommentarzeichen.
a
bc
d
e
fgh
ij
k
l
mn
op
Reduzieren Sie dann jede Zeile nach oben in eine einzelne Zeile. Da b
es sich zum Beispiel in Zeile zwei in der zweiten Spalte befindet, wird es in Zeile eins in der zweiten Spalte angezeigt, sobald wir es zusammengeklappt haben . Ebenso c
wird in die dritte Spalte der ersten Zeile und d
in die vierte Spalte eingefügt. Wiederholen Sie dies für jeden Charakter und Sie erhalten Folgendes:
abcdefghijklmnop
Wichtiger Hinweis: Es scheint, als ob die einfache Lösung darin besteht, einfach die Kommentare zu entfernen, jedes Leerzeichen zu entfernen und jede Zeile zu verbinden. Dies ist kein gültiger Ansatz! Da der ursprüngliche Code möglicherweise Leerzeichen enthält, werden diese bei diesem Ansatz entfernt. Dies ist zum Beispiel eine absolut gültige Eingabe:
hello #Line one
#Line two
world! #Line three
Und die entsprechende Ausgabe sollte sein:
hello world!
Die Herausforderung:
Schreiben Sie ein Programm oder eine Funktion, die kommentierten Code als Eingabe verwendet und den Code mit allen darin analysierten Kommentaren ausgibt oder zurückgibt. Sie sollten den Code ohne nachfolgende Leerzeichen ausgeben , obwohl eine nachfolgende Newline zulässig ist. Das Kommentarzeichen wird immer sein #
und es wird immer ein zusätzliches Leerzeichen geben, bevor die Kommentare beginnen. #
wird nicht im Kommentarbereich der Eingabe angezeigt. Um die Herausforderung einfacher zu gestalten, müssen Sie die folgenden Eingaben nicht bearbeiten:
Sie können davon ausgehen, dass der Code nicht aus zwei Zeichen in derselben Spalte besteht. Dies ist beispielsweise eine Eingabe, die gegen diese Regel verstößt:
a #A character in column one bc #Characters in columns one and two
Sie können auch davon ausgehen, dass alle Kommentarzeichen in derselben Spalte erscheinen. Zum Beispiel diese Eingabe:
short #this is a short line long #This is a long line
gegen diese Regel verstößt. Dies bedeutet auch, dass
#
nicht im Codeabschnitt sein wird.Und schließlich müssen Sie keine Codeabschnitte mit führenden oder nachfolgenden Leerzeichen behandeln. Beispielsweise,
Hello, # World! #
Sie können auch davon ausgehen, dass die Eingabe nur druckbare ASCII-Zeichen enthält.
Beispiele:
Input:
hello #Line one
#Line two
world! #Line three
Output:
hello world!
Input:
E #This comment intentionally left blank
ac #
h s #
ecti #
on is #
one c #
haracte #
r longer #
than the #
last! #
Output:
Each section is one character longer than the last!
Input:
4 #This number is 7
8 #
15 #That last comment is wrong.
16 #
23 #
42 #
Output:
4815162342
Input:
Hello #Comment 1
world #Comment 2
, #Comment 3
how #Comment 4
are #Comment 5
you? #Comment 6
Output:
Hello world, how are you?
Input:
Prepare #
for... #
extra spaces! #
Output:
Prepare for... extra spaces!
Sie können Eingaben in einem beliebigen vernünftigen Format vornehmen, z. B. eine Liste von Zeichenfolgen, eine einzelne Zeichenfolge mit Zeilenumbrüchen, eine 2D-Liste von Zeichen usw. Die kürzeste Antwort in Bytes gewinnt!
hello world!
Sie gezeigt haben) hinzufügen ? Außerdem geben Sie an: " #
Wird nicht im Kommentarbereich der Eingabe angezeigt. ", Aber kann es im Code-Snippet selbst vorkommen?
do {stuff} while (condition);
mit der Erklärung in der Reihenfolge do while (condition); #Explainything
dann {stuff} #Explainything
.