На початку цього тижня ми дізналися про те, як форматувати езотеричні мови для коментування. Сьогодні ми будемо робити це зворотне. Мені потрібно, щоб ти написав програму або функцію, яка аналізує якийсь добре коментований езотеричний код і аналізує коментарі, повертаючи лише код. Використовуючи кілька прикладів з попереднього завдання, ось як добре коментується код:
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!
Ви можете взяти вхід у будь-якому розумному форматі, наприклад, список рядків, одна рядок з новими рядками, 2d список символів тощо. Найкоротший відповідь у байтах виграє!
hello world!
показано вами)? Крім того, ви заявляєте: " #
не відображатиметься в розділі коментарів вхідних даних. ", Але чи може це відбутися в самому фрагменті коду?
do {stuff} while (condition);
з поясненням в порядку do while (condition); #Explainything
тоді {stuff} #Explainything
.