Вступление
Большинство разработчиков кода добавляют здесь объяснения к своим материалам, чтобы было легче понять, что происходит. Обычно строки кода идут слева, а соответствующее объяснение справа с каким-то разделителем. Чтобы это выглядело красиво, все разделители находятся в одном столбце. Кроме того, длинный текст объяснения обычно переносится на следующую строку, поэтому читателям не нужно прокручивать текст по горизонтали, чтобы прочитать все.
Однако, когда вы хотите отредактировать это объяснение, потому что вы сделали несколько сумасшедших гольфов, вы часто заканчиваете тем, что тратите время, чтобы сделать это объяснение довольно симпатичным. Поскольку это очень повторяющаяся задача, вы хотите написать программу для этого.
Соревнование
Учитывая несколько строк кода с объяснением и разделителем, выведите красиво отформатированный код с объяснением.
пример
вход
shM-crz1dc4. "ANDBYOROF # z = вход rz1 # преобразовать ввод в верхний регистр cd # разделить ввод по пробелам c4. "ANDBYOROF # создать список слов из упакованной строки, которые должны игнорироваться - # отфильтровать эти слова hM # взять только первую букву всех слов s # объединить их в одну строку
Выход
shM-crz1dc4. "ANDBYOROF # z = вход rz1 # преобразовать ввод в верхний регистр cd # разделить ввод по пробелам c4. "ANDBYOROF # создать список слов из упакованной строки, которая должна быть # игнорируется - # отфильтровать эти слова hM # взять только первую букву всех слов s # объединить их в одну строку
Один файл cookie для первого, кто может узнать, что делает этот код.
Алгоритм форматирования
- Найдите самую длинную строку кода (исключая пояснения и пробелы между кодом и разделителем).
- Добавьте 5 пробелов после этой строки кода и добавьте соответствующий разделитель с пояснениями. Это теперь опорная линия.
- Настройте все остальные строки в этой опорной линии, так что все сепаратора обеспечивают в одном столбце.
- Оберните все строки длиной более 93 символов в новую строку следующим образом:
- Найдите последнее слово, конец которого находится в столбце 93 или ниже.
- Возьмите все слова после этого и перенесите их на новую строку с ведущим разделителем и правильным интервалом. Пробел между этими двумя словами должен быть удален, поэтому первая строка заканчивается символом слова, а вторая строка начинается с одного после разделителя.
- Если полученная строка все еще длиннее 93 символов, делайте то же самое снова, пока каждая строка не станет ниже 94 символов.
Примечания
- Слово состоит из непробельных символов. Слова разделяются одним пробелом.
- Перенос слов всегда возможен. Это означает, что ни одно слово не может быть таким длинным, чтобы сделать обертку невозможной.
- Входные данные будут содержать только печатный ASCII и не будут содержать пробелы в конце
- Разделитель будет отображаться только один раз в строке.
- Хотя объяснение может иметь неограниченную длину, разделитель и код могут иметь только суммарную максимальную длину
93 - 5 = 87
символов. 5 символов - это пробелы между кодом и разделителем. Код и разделитель всегда будут длиной не менее одного символа. - Входные данные могут содержать пустые строки. Они никогда не будут содержать никаких символов (кроме новой строки, если вы берете ввод в качестве многострочной строки). Эти пустые строки также должны присутствовать в выводе.
- Каждая строка будет иметь некоторый код, разделитель и объяснение. Исключение составляют пустые строки.
- Вы можете принять ввод в любом разумном формате, если он не был предварительно обработан. Укажите в своем ответе, какой из них вы используете.
- Вывод может быть многострочной строкой или списком строк.
правила
- Функция или полная программа разрешены.
- Правила по умолчанию для ввода / вывода.
- Стандартные лазейкиПрименяются .
- Это код-гольф , поэтому выигрывает меньшее количество байт. Tiebreaker является более ранним представлением.
Контрольные примеры
Формат ввода здесь представляет собой список строк, представляющих строки и одну строку для разделителя. Оба разделены запятой. Вывод представляет собой список строк.
['shM-crz1dc4. "ANDBYOROF # z = input', '', 'rz1 # преобразовать ввод в верхний регистр', 'cd # разделить ввод пробелами', 'c4." ANDBYOROF # создать список слов из упакованного строка, которая должна игнорироваться ',' - # отфильтровать эти слова ',' hM # взять только первую букву всех слов ',' s # объединить их в одну строку '], "#" -> [' shM-crz1dc4 . "ANDBYOROF # z = input ',' ',' rz1 # преобразовать ввод в верхний регистр ',' cd # разбить ввод на пробелы ',' c4. 'ANDBYOROF # создать список слов из упакованной строки, которая должна быть' , '# игнорируется', '- # отфильтровать эти слова ',' hM # взять только первую букву всех слов ',' s # объединить их в одну строку '] ['codecodecode e # Объяснение', 'sdf dsf sdf e # A Очень, очень, очень, очень, очень, очень, очень, очень, очень долго, долго, долго, долго, долго, долго, долго, долго, долго, долго, и это становится все длиннее и длиннее.', '', 'some больше коде # и еще несколько объяснений '], "e #" -> [' codecodecode e # Объяснение ',' sdf dsf sdf e # A Очень, очень, очень, очень, очень, очень, очень, очень, очень долго, долго, долго, долго, долго »,« e # long. длинное длинное длинное длинное длинное объяснение, и оно становится все длиннее ',' e # и дольше ',' ',' еще немного кода e # и еще больше объяснений ']
Удачного кодирования!
length of the longest code-line + 5
. Это также относится к строкам, которые содержат только пояснения, потому что они были перенесены.