Завтра мозгу исполняется год! В честь его дня рождения мы проводим вечеринку по случаю дня рождения в стиле PPCG, на которой несколько пользователей публикуют вопросы, связанные с умом! Помогите нам отпраздновать! :)
Brain-flak - это эзотерический язык, который я написал, где все команды являются скобками, и все скобки должны быть полностью согласованы. Чтобы позаимствовать мое собственное определение :
Для этого вызова, «скобка» представляет собой любая из этих символов:
()[]{}<>
.Пара скобок считается "совпавшей", если открывающая и закрывающая скобки расположены в правильном порядке и в них нет символов, например
() []{}
Или если каждый подэлемент внутри него также совпадает.
[()()()()] {<[]>} (()())
Субэлементы также могут быть вложены в несколько слоев.
[(){<><>[()]}<>()] <[{((()))}]>
Строка считается «Полностью сопоставленной», если и только если:
Каждый отдельный символ - это скобка,
Каждая пара скобок имеет правильные открывающую и закрывающую скобки и в правильном порядке
В связи с празднованием первого дня рождения «мозговых штурмов» сегодняшняя задача состоит в том, чтобы взять несбалансированный набор скобок и определить, какие типы операций необходимы для того, чтобы сделать его корректным.
Например,
((
недопустим код мозгового штурма, но если мы добавим))
к нему, он становится(())
, который полностью сбалансирован, и, следовательно, действителен мозговой зенит. Это делает этот вклад доступным .Точно так же
>}
недействительно, но мы можем предвосхитить{<
его, чтобы сделать{<>}
, что допустимо. Это делает этот вклад ожидаемым .Некоторые входные данные немного сложнее. Например,
)][({
нельзя сделать действительным только путем добавления или добавления. Но это можно сделать действительным,[(
добавив и добавив})]
. Таким образом, этот вход является одновременно prependable и appendable .Наконец, некоторые входные данные никогда не могут быть сделаны действительным кодом мозгового штурма с помощью любой комбинации добавления или добавления. Например,
(>
никогда не может быть сделано действительным. (Предварительное<
создание создает<(>
, а добавление)
создает(>)
, ни одно из которых не является действительным). Следовательно, этот ввод не является ни добавляемым, ни добавляемым.
Для сегодняшнего вызова вы должны написать программу или функцию, которая принимает строку в скобках и определяет, является ли строка
appendable
prependable
both
neither
Вы можете выбрать, какие значения вы используете для представления в каждом конкретном случае. Например, вывести 1, 2, 3, 4
, или 'a', 'p', 'b', 'n'
, или 1, 'foo', 3.1415, -17
, или как угодно. Пока каждый вывод отличается и согласован , это нормально. Однако вы должны четко указать, какой вывод соответствует какому случаю.
Вы можете вернуть это значение в любом удобном для вас формате (например, возврат из функции, печать в STDOUT, изменение аргументов, запись в файл и т. Д.).
Вы можете предположить, что входные данные никогда не будут действительными или пустыми.
Примеры
Следующие входные данные являются все возможными :
))
(((()()())))}
)>}]
()[]{}<>)
Это все можно добавить :
(({}{})
((((
([]()())(
{<<{
Это все оба :
))((
>()[(()){
>{
И это не все ни :
)(}
{(((()()()))>
[}
((((((((((>
((((((((((<>()]
Как обычно, это код-гольф , поэтому применяются стандартные лазейки, и выигрывает самый короткий ответ в байтах!
Эта задача особенно трудна в мозговых штурмах, поэтому максимальное количество брауни указывает на любой ответ, написанный в мозговых штурмах. :)
][
это не appendable, так как вы ничего не можете добавить не может сделать его действительным. Точно так же это не предсказуемо. Это ... «вставляемый»! Вы можете вставить его в строку, чтобы сделать весь действительный Brainflak.
You can assume that the input will never be valid brain-flak or empty.
maximum brownie points
Я думаю, что предлагая максимальное количество очков для брауни и печенье вместо этого поощряет Brain Flaking к этому вызову больше, чем просто очки для брауни, поскольку я не думаю, что это вообще тривиально на любом языке, не говоря уже о Brain-Flak. : P