Все скобки на моей клавиатуре изношены, и я хочу избегать их использования в максимально возможной степени. Ваша задача - сбалансировать строку, содержащую скобки, добавив их до и после каждой строки.
Это похоже на автоматические круглые скобки TI-Basic и закрытие строки (т.е. Output(1, 1, "Hello, World!
). Это также экономит драгоценные байты из программы!
Пример ввода:
This line has no parentheses
alert(Math.max(1, 2
1+1)*2).toString()
function() { alert('Hello, World!'); })(
Пример (возможный) вывод:
This line has no parentheses
alert(Math.max(1, 2))
((1+1)*2).toString()
(function() { alert('Hello, World!'); })()
Спецификация:
Для каждой строки ввода
Добавьте столько открытых скобок в начало и закрывающих скобок в конец строки, сколько необходимо для балансировки скобок в строке.
Определение «баланса»:
Такое же количество
(
и)
в линииДля каждой подстроки, начинающейся с начала строки, эта подстрока не должна иметь больше закрывающих скобок, чем открывающих скобок
- Например,
(foo))(bar
не сбалансирован, потому что(foo))
имеет больше закрывающих скобок, чем открывающих скобок
- Например,
Вы можете добавить лишние скобки, если хотите, если это делает ваш код короче
Вам не нужно беспокоиться о строковых литералах или о чем-то подобном, предположим, что все скобки нуждаются в балансировке
Выведите каждую строку со сбалансированными скобками
Это код-гольф , поэтому выиграет самый короткий код в байтах!
источник
()
круглые скобки, или делать другие кронштейны{}
,[]
,<>
и т.д. Необходимо также учитывать?(
и)
.Ответы:
GolfScript, 23 байта
Лазейка, которую я эксплуатирую, - это решение, которое:
По сути, для каждой строки этот код подсчитывает количество символов в строке, которые не открывают круглые скобки, и добавляет к строке много дополнительных открывающих скобок, а затем делает то же самое для закрывающих скобок. Это невероятно неэффективно, но гарантирует, что все скобки в строке вывода сбалансированы.
Например, с учетом ввода:
эта программа выведет:
Ps. Вы также можете проверить этот код онлайн .
источник
Perl, 32 = 31 + 1 или 73 = 72 + 1 (минимизированные скобки)
32 = 31 + 1: с лишними лишними скобками
Редактирование:
y///
.$a
удалена.Используется с переключателем времени выполнения
-p
(+1 байт).Тестовый файл
input.txt
:Командная строка:
или
Результат:
Ungolfed:
Алгоритм прост, просто добавьте аналог для каждой найденной скобки.
73 = 72 + 1: добавление минимального количества скобок
Этот скрипт добавляет только минимальное количество скобок, чтобы получить сбалансированный вывод.
Используется с переключателем времени выполнения
-p
(+1 байт).Результат:
Ungolfed:
81 = 80 + 1: добавление минимального количества скобок
Это более старый метод добавления минимального количества скобок для сбалансированного вывода.
Он использует Perl 5.14 (из-за неразрушающего модификатора замещения) и переключатель времени выполнения
-p
(+1 байт).Результат:
Ungolfed:
источник
'('x/\)/g
всегда равных '(' ...y///
вместоm//g
подсчета скобок.Python
2.73:626058 байтНе супер гольф, но вы знаете. Я мог бы выжать еще несколько байтов, если бы я действительно попытался.
Для каждой строки выведите
(
* номер)
строки, затем строку, затем)
* номер(
строки. Если я правильно понимаю правила, это всегда даст правильный результат.Выйти, выдав исключение, в результате того, как я сделал ввод. (Входные данные всегда являются трудной частью этих проблем.) Если это не приемлемо, это будет стоить мне несколько байтов, хотя я еще не уверен, сколько.
Пример вывода:
источник
python2 balanced_parenthesis.py < input.txt 2>/dev/null
получает вывод, который я написал, но если вы хотите многострочный ввод, делая это в интерактивном режиме, это будет стоить мне несколько байтов. Дайте мне секунду, я что-нибудь придумаю ...while 1:s=raw_input();c=s.count;print'('*c(')')+s+')'*c('(')
c=s.count
. Я думал , что ты должен был сделатьc=s
,s.c()
. Благодарность!Чистый Баш, 72 байта
Использует тот же алгоритм, что и ответ @groundmonorail:
Выход:
источник