Ctrl K

Вырезать комментарии из кода

Средняя
Программа на C-подобном языке задана списком строк lines. Уберите из неё комментарии двух видов: - // начинает **строчный** комментарий: он и всё правее него до конца строки удаляются. - /* начинает **блочный** комментарий: удаляется всё до ближайшего следующего */, даже через несколько строк. Закрывающая пара не может перекрываться с открывающей: в /*/ комментарий ещё не закрыт. Переводы строк внутри блока тоже удаляются, поэтому части строк до и после блока склеиваются. Действует тот комментарий, что начался раньше: // внутри блока ничего не значит, как и /* внутри любого комментария. Кавычек в смысле строковых литералов можно не учитывать — они не защищают текст от удаления. Верните код без комментариев в том же виде — списком строк. Строки, ставшие пустыми, в ответ не включайте.
Пример 1
lines=["x = 1; // init", "/* tmp", "y = 2; */ z = 3;", "// done"] → ['x = 1; ', ' z = 3;']

От первой строки остаётся x = 1; (пробел перед комментарием сохраняется). Блочный комментарий съедает вторую строку и начало третьей, остаётся z = 3;. Последняя строка — целиком комментарий и пропадает.

Пример 2
lines=["go(/*a", "b*/1);"] → ['go(1);']

Блочный комментарий захватывает и перевод строки, поэтому две строки склеиваются в одну: go(1);.

Пример 3
lines=["a/*/b*/c", "d // e /* f"] → ['ac', 'd ']

/*/ ещё не закрывает комментарий — он кончается на */ после b. Во второй строке /* стоит внутри строчного комментария и ничего не открывает.

Ограничения
  • 1 ≤ len(lines) ≤ 100
  • 0 ≤ len(lines[i]) ≤ 80
  • Строки состоят из печатных ASCII-символов
  • Каждый открытый блочный комментарий где-то закрывается
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиРазложить анаграммы по группам СредняяСлово на сетке букв СредняяРазбиение на слова из словаря СредняяСамое большое число из кусков СредняяБлижайшие события в журнале Средняя
загружаем Python…
Вход
lines=["x = 1; // init", "/* tmp", "y = 2; */ z = 3;", "// done"]
Ожидается
['x = 1; ', ' z = 3;']

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 85 тестов на сервере, включая скрытые.