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 Reihenfolgedo while (condition); #Explainything
dann{stuff} #Explainything
.Antworten:
Gelee ,
87 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Python 2,
4843 BytesVielen Dank an @xnor für das Golfen mit 5 Bytes!
Testen Sie es auf Ideone .
quelle
map(max,*x)
weil esmax
eine beliebige Anzahl von Argumenten braucht undNone
klein ist.map
man das so benutzen kann ... Danke!`...`[2::5]
Trick?`...`
ist äquivalent zurepr(...)
. Für die Liste der Singleton-Zeichenfolgen erhalten['a', 'b', 'c']
Sie die Zeichenfolge"['a', 'b', 'c']"
. Zum Schluss[2::5]
werden die ersten beiden Zeichen ("['"
) abgeschnitten und jedes fünfte Zeichen der verbleibenden Zeichenfolge übernommen.JavaScript (ES6),
977560 ByteVielen Dank an @Neil für die Unterstützung beim Golfspielen mit 22 Bytes
Die Eingabe ist ein Array von Zeilen.
a
ist eine Array-Eingabep
ist vorheriger Artikelc
ist aktueller Artikelm
ist eine Übereinstimmungszeichenfolgeo
versetzt istquelle
m
Regexp-Flag nicht erforderlich (hatten Sie$
an einer Stelle ein?), Ebenso wie das Leerzeichen in(p, c)
. Zum Schluss denke ich,replace
wird es kürzer als klappen[...p].map().join
.length
und userscript, zählen vielleicht hast du nicht das Newline, aber nur , weil ich aus Versehen das Semikolon enthalten;
was nicht benötigt wird (JavaScript hat ASI).replace
dass es so viel helfen würde, das ist wirklich ordentlich!Perl,
353432 BytesBeinhaltet +1 für
-p
Geben Sie eine Eingabe für STDIN ein
eso.pl
Beachten Sie, dass nach dem Finale ein Leerzeichen steht
;
. Der Code funktioniert wie gezeigt, wird jedoch\0
durch das Literalzeichen ersetzt, um die beanspruchte Punktzahl zu erhalten.quelle
$a|=...
ist ziemlich gut gemacht, ich habe eine Weile gebraucht, um herauszufinden, was du getan hast! Eine Frage allerdings:*_=a
scheint in etwa zu entsprechen$_=$a
, warum ist das so?*_=a
ist eine sehr obskure Glob-Zuweisung, bei der die_
Globals und diea
Globals gleichgesetzt werden. Es ist also nicht so sehr eine Kopie von$a
nach,$_
sondern von diesem Zeitpunkt an (global)$a
und$_
es handelt sich tatsächlich um dieselbe Variable. Alles um 1 Byte zu sparen ...Python 2, 187 Bytes
Ich werde diesmal mehr Golf spielen, morgen habe ich Schule;)
quelle
1 for
kann auf reduziert werden1for
. Auch, wenn die Summe der Liste (in Zeile 5) nicht negativ sein kann, können Sie einfach überprüfen<1
statt==0
. Schönen Schultag! : D +1.Ruby, 63 Bytes
Im Grunde genommen eine Portierung von Dennis 'Jelly . Nimmt Eingaben als ein Array von Zeichenfolgen.
Sehen Sie es auf eval.in: https://eval.in/640757
quelle
CJam , 12 Bytes
Danke an Sp3000 für das Speichern von 2 Bytes.
Ein unbenannter Block, der eine Liste von Zeichenfolgen (eine für jede Zeile) durch eine einzelne Zeichenfolge ersetzt.
Probieren Sie es online!
Erläuterung
quelle
J, 30 Bytes
Nimmt eine Liste von Zeichenfolgen als Eingabe. Verwendet im Grunde den gleichen Ansatz wie Dennis in seiner Jelly-Antwort.
Kommentiert und erklärt
Zwischenschritte:
Testfall
quelle
Javascript (ES6), 63 Byte
Nimmt Eingaben als ein Array von Zeichenfolgen.
quelle
Retina , 32 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
quelle
Pyke,
1510 BytesProbieren Sie es hier aus!
Port of the Jelly antworten
quelle
C #
157122 BytesDank @milk 35 Bytes Golf gespielt - obwohl ich schwöre, dass ich das früher versucht habe.
Nimmt die Eingabe als 2D-Array von Zeichen an.
157 Bytes:
quelle
Trim()
funktionieren stattTrimEnd()
? Noch besser finde ich, dass Sie eine Menge Bytes sparen können, indem Sie s [0] als Ausgabevariable verwenden und verwenden,return new string(s[0],0,i)
woi
der Index des letzten Codezeichens ist. Diese Idee erfordert möglicherweise zweifor
Schleifen anstelle derforeach
, ich werde mehr darüber nachdenken und später heute versuchen, tatsächlichen Code zu schreiben.Trim()
wird auch von Anfang an trimmen, was meiner Meinung nach nicht gültig wäre. Ich habe auch ursprünglich das Laden in s [0] durchgeführt und ich hatte inti;
außerhalb der Schleife (um es in der Rückgabe wiederzuverwenden), von der ich glaube, dass letztendlich Bytes hinzugefügt wurdenPyth, 11 Bytes
Ein Programm, das eine Liste von Zeichenfolgen in STDIN eingibt und eine Zeichenfolge druckt.
Probieren Sie es online aus
Wie es funktioniert
quelle
sed, 126 bytes
Erfordert eine neue Zeile am Ende der Eingabe.
Ich bin mir sicher, dass ich ein bisschen mehr Golf spielen kann, aber ich bin nur froh, dass es jetzt funktioniert.
quelle
Perl 6 , 39 Bytes
Übersetzung der Python-Lösung von Dennis .
Nimmt Eingaben als Liste von Zeichenfolgen und gibt eine Zeichenfolge zurück.
( online ausprobieren )
quelle
Gelee , 27 Bytes
Testen Sie es bei TryItOnline
Verwendet die strengste Spezifikation - das zusätzliche Leerzeichen, bevor das Kommentarzeichen auf Kosten eines Bytes entfernt wird.
Die Eingabe ist eine Liste von Zeichenfolgen.
quelle
Ruby, 77 Bytes
quelle
TSQL,
216175 BytesGolf gespielt:
Ungolfed:
Geige
quelle
Javascript,
5634 Bytes, nicht konkurrierendWie @ n̴̖̋h̷͉̃ã̷͉h̷̭̿d̷̰̀ĥ̷̳ betonte, bin ich nicht auf zusätzliche Leerzeichen vorbereitet
quelle
Dyalog APL , 22 Bytes
Inspiration .
(
⎕UCS
Zeichendarstellung von¯2↓
alle bis auf die letzten zwei von⍳∘35↑
bis zur Position der ersten 35 ("#"), die außerhalb der Klammer steht, von⊢
das, was außerhalb der Klammer ist)
nämlich...⌈⌿
die kolumnaren Maxima∘
von⎕UCS
die Unicode-WerteTryAPL online!
quelle