Дан следующий вклад в программу:
- Список начальных символов блока
- Список символов конца блока
- Строка для форматирования
отформатируйте строку с блоками, разделенными двумя наборами символов с отступом.
Форматирование выполняется с двумя пробелами на уровень, а круглые скобки размещаются, как показано в примере ниже. Вы можете считать, что наборы открывающих и закрывающих символов не пересекаются.
Например, для {[(<
и }])>
в качестве открывающих и закрывающих наборов символов и следующей строки:
abc{xyz{text[note{comment(t{ex}t)abc}]}}
ожидается следующий вывод:
abc
{
xyz
{
text
[
note
{
comment
(
t
{
ex
}
t
)
abc
}
]
}
}
Вы не можете жестко закодировать список символов «круглых скобок». Способ ввода не указан, однако; это могут быть аргументы командной строки или стандартный ввод, как вы пожелаете.
code-golf
string
whitespace
balanced-string
Прашант Бхате
источник
источник
./program 'p' 'q' <<< '1p23p45q67q8'
или нужна только поддержка{[(<
и}])>
?Ответы:
Рубин,
1061019695Ввод осуществляется через командную строку.
источник
~-j+=1
вместо(j+=1;j-1)
. Кроме того, использование$.
везде вместоj
позволяет удалитьj=0
, что сохраняет другого персонажа.Perl -
1319694 символовПохоже, должно быть место для устранения общих выражений, по крайней мере, но это быстрый способ, который обрабатывает пример, а также гипотезу Джои Адамса о произвольных скобках.
Действительно, было много возможностей для улучшения:
... и еще немного:
источник
Mathematica (не код гольф)
Тестовое задание
В качестве бонуса можно использовать следующую функцию для форматирования выражения mathematica.
РЕДАКТИРОВАТЬ (без кода гольф) Обновлен с тонким гранулярным контролем над способом перевода строк
Выход
источник
indent
. Ваша цель - максимально краткий код или читабельность? Есть несколько способов сделать этот код короче, если это действительно ваша цель. Также: «Вы не можете жестко закодировать список символов в скобках». но разве это не то, что вы сделали здесь? Во всяком случае, извините, чтобы звучать так негативно; это просто кажется мне странным ответом на ваш собственный вызов.JavaScript,
255227205 символовЭй, его длина идеально вписывается в байт! : DЭто функция, передайте ей начальные символы, конечные символы, а затем текст.
источник
Питон - 162 символа
источник
Python 2.7.X - 136 символов
Использование : $ ./foo.py '(' ')' '(ab (cd (ef) gh) ij)'
Результирующий вывод:
источник
print
утверждений?С -
213209Я ненавижу глупые ошибки ...>. <
Считывает левую часть из первого аргумента командной строки, правую часть из второго аргумента и вводит отступ в stdin.
Довольно напечатано и прокомментировано:
источник
С (
159225 символов)Мне потребовалось 66 дополнительных символов только для того, чтобы исправить ошибку с пустыми строками :( Честно говоря, мне нужен новый подход, но сейчас я назову это днем.
Довольно быстрый и грязный подход. В нем есть ошибка создания пустых строк между последовательными закрывающими скобками, но в остальном он выполняет свою работу (или я так думаю). Я вернусь к нему для лучшего и более чистого решения, когда-нибудь на этой неделе.
char * b - набор открывающих скобок, char * e - набор закрывающих скобок, а char * s - строка ввода.
источник
Perl - 69 байт
TMTOWTDI делает код простым
источник
Скала (2,9), 211 символов
источник
Perl -
8985 байтВерсия ответа Hojung Youn, которая принимает символы блока через два аргумента.
Называется как:
источник
Python3,
184182 символаПример:
источник
_,p,q,t=sys.argv
Groovy, 125
Вы можете сохранить скрипт в файле indent.groovy и попробовать его с помощью:
groovy indent.groovy "abc {xyz {text [note {comment (t {ex} t) abc}]}}" "{[(" ") ]}»
источник
Python - 407
Нежелательная версия программы:
Аргументы программы (по порядку): открывающие скобки, закрывающие скобки и текст для отступа.
Пример ($ - приглашение командной строки):
источник
D (300)
нужна строка с нулевым символом в конце для проверки границ (в противном случае
if(*s)
необходимо изменить наif(s.length)
)источник
Джава
Не
codegolf version
! Предполагая, что у нас есть эта версия split (), которая включает разделители,источник
StringUtils
не является частью стандарта JDK.C 284 Не пробелы Символы
Я не фанат запутывания, но хорошо ...
Использование: ./program start_brackets end_brackets string_to_parse
источник
php
(187)(153)Функция принимает строку, открывая разделители, заканчивая разделители в качестве аргументов.
источник
С, 256
Параметры:
Я разбил код, чтобы избежать горизонтальной полосы прокрутки.
Полная программа составляет 363 символа.
источник
VB.net (? C)
Язык не подходит для игры в гольф, поэтому я использовал необычный подход. Использование слушателя трассировки для вывода на консоль.
Использует аргументы командной строки для ввода
источник
Powershell, 146 байт
Ungolfed Объяснение
источник
C, 181 символов
Практически самый простой подход, который только можно себе представить. Итерация по строке (v [3]), если это левая скобка (как определено в v [1]), увеличьте уровень отступа, если это правая скобка (как определено в v [2]), уменьшите уровень отступа ,
источник
С,
114121Не очень хорошо, но решение ... пустая строка может появиться до / после в зависимости от того, начинается ли ввод / заканчивается скобками.
С новым ограничением этот подход практически бесполезен для игры в гольф.
источник