Na początku tego tygodnia dowiedzieliśmy się, jak formatować ezoteryczne języki do komentowania. Dzisiaj zrobimy coś odwrotnego. Potrzebuję napisać program lub funkcję, która analizuje dobrze skomentowany ezoteryczny kod i analizuje komentarze, zwracając tylko kod. Korzystając z przykładów z poprzedniego wyzwania, oto jak wygląda dobrze skomentowany kod:
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
Oto, co musisz zrobić, aby wyodrębnić kod. Najpierw usuń znak komentarza ( #
), spację przed nim i wszystko po znaku komentarza.
a
bc
d
e
fgh
ij
k
l
mn
op
Następnie zwinąć każdą linię w górę w jedną linię. Na przykład, ponieważ b
znajduje się w drugiej kolumnie na drugiej linii, raz my zwinąć ją w górę, to będzie w drugiej kolumnie na linii jednego . Podobnie c
zostanie umieszczony w trzeciej kolumnie pierwszego wiersza i d
umieszczony w czwartej. Powtórz to dla każdej postaci, a otrzymasz:
abcdefghijklmnop
Ważna uwaga: wydaje się, że trywialnym rozwiązaniem jest po prostu usunięcie komentarzy, usunięcie każdej spacji i dołączenie do każdej linii. To nie jest prawidłowe podejście! Ponieważ oryginalny kod może zawierać spacje, zostaną one usunięte dzięki temu podejściu. Na przykład jest to całkowicie poprawne wejście:
hello #Line one
#Line two
world! #Line three
Odpowiednim wyjściem powinno być:
hello world!
Wyzwanie:
Napisz program lub funkcję, która pobiera skomentowany kod jako dane wejściowe i wysyła lub zwraca kod ze wszystkimi parsowanymi komentarzami. Powinieneś wypisać kod bez spacji końcowych, chociaż dozwolony jest jeden znak nowej linii. Komentarz zawsze będzie #
i zawsze będzie jedno dodatkowe miejsce przed rozpoczęciem komentarzy. #
będzie nie pojawiają się w sekcji komentarzy na wejściu. Aby uprościć wyzwanie, oto niektóre dane wejściowe, z którymi nie musisz sobie poradzić:
Możesz założyć, że kod nie będzie zawierał dwóch znaków w tej samej kolumnie. Na przykład jest to dane wejściowe, które naruszają tę zasadę:
a #A character in column one bc #Characters in columns one and two
Możesz również założyć, że wszystkie znaki komentarza pojawiają się w tej samej kolumnie. Na przykład to wejście:
short #this is a short line long #This is a long line
narusza tę zasadę. Oznacza to również, że
#
nie będzie go w sekcji kodu.I na koniec, nie musisz obsługiwać sekcji kodu ze spacjami wiodącymi lub końcowymi. Na przykład,
Hello, # World! #
Możesz również założyć, że dane wejściowe zawierają tylko drukowalne znaki ASCII.
Przykłady:
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!
Możesz wprowadzić dane w dowolnym rozsądnym formacie, na przykład, lista ciągów, pojedynczy ciąg znaków z nowymi liniami, 2d lista znaków itp. Wygrywa najkrótsza odpowiedź w bajtach!
hello world!
pokazałeś)? Ponadto stwierdzasz: „ #
nie pojawi się w sekcji komentarza na wejściu. ”, Ale czy może wystąpić w samym fragmencie kodu?
do {stuff} while (condition);
z wyjaśnieniami w celu do while (condition); #Explainything
potem {stuff} #Explainything
.