Ранее на этой неделе мы узнали о том, как форматировать эзотерические языки для комментариев. Сегодня мы собираемся сделать обратное. Мне нужно, чтобы вы написали программу или функцию, которая анализирует некоторый хорошо прокомментированный эзотерический код и анализирует комментарии, возвращая только код. Используя некоторые примеры из предыдущего вызова, вот как выглядит хорошо прокомментированный код:
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
Вот что вам нужно сделать, чтобы извлечь код. Сначала удалите символ комментария ( #
), пробел перед ним и все после символа комментария.
a
bc
d
e
fgh
ij
k
l
mn
op
Затем сверните каждую строку вверх в одну строку. Например, поскольку он b
находится во втором столбце второй строки, как только мы свернем его, он будет во втором столбце первой строки . Аналогично, c
будет помещен в третий столбец первой строки и d
будет помещен в четвертый. Повторите это для каждого персонажа, и вы получите это:
abcdefghijklmnop
Важное примечание: кажется, что тривиальное решение состоит в том, чтобы просто удалить комментарии, удалить все пробелы и присоединить каждую строку. Это не обоснованный подход! Поскольку в исходном коде могут быть пробелы, при таком подходе они будут удалены. Например, это совершенно правильный ввод:
hello #Line one
#Line two
world! #Line three
И соответствующий вывод должен быть:
hello world!
Соревнование:
Напишите программу или функцию, которая принимает закомментированный код в качестве входных данных и выводит или возвращает код со всеми проанализированными комментариями. Вы должны вывести код без концевых пробелов, хотя допустим один завершающий символ новой строки. Символ комментария всегда будет #
, и перед началом комментариев всегда будет один дополнительный пробел. не#
будет отображаться в разделе комментариев ввода. Чтобы упростить задачу, вот некоторые входные данные, которые вам не нужно обрабатывать:
Можно предположить, что в коде не будет двух символов в одном столбце. Например, это входные данные, которые нарушают это правило:
a #A character in column one bc #Characters in columns one and two
Вы также можете предположить, что все символы комментария появляются в одном столбце. Например, этот вход:
short #this is a short line long #This is a long line
нарушает это правило. Это также означает, что
#
не будет в разделе кода.И, наконец, вам не нужно обрабатывать участки кода с начальными или конечными пробелами. Например,
Hello, # World! #
Вы также можете предположить, что ввод содержит только печатные символы ASCII.
Примеры:
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!
Вы можете вводить данные в любом разумном формате, который вам нравится, например, в виде списка строк, одной строки с символами новой строки, 2-го списка символов и т. Д. Самый короткий ответ в байтах побеждает!
hello world!
показано на рисунке)? Кроме того, вы заявляете: « #
не будет отображаться в разделе комментариев ввода », но может ли это произойти в самом фрагменте кода?
do {stuff} while (condition);
с объяснением в порядке do while (condition); #Explainything
тогда {stuff} #Explainything
.