Завтра мозгу исполняется год! В честь его дня рождения мы проводим вечеринку по случаю дня рождения в стиле PPCG, на которой несколько пользователей публикуют вопросы, связанные с умом! Помогите нам отпраздновать! :)
Brain-flak - это эзотерический язык, который я написал, где все команды являются скобками, и все скобки должны быть полностью согласованы. Чтобы позаимствовать мое собственное определение :
Для этого вызова, «скобка» представляет собой любая из этих символов:
()[]{}<>
.Пара скобок считается "совпавшей", если открывающая и закрывающая скобки расположены в правильном порядке и в них нет символов, например
() []{}
Или если каждый подэлемент внутри него также совпадает.
[()()()()] {<[]>} (()())
Субэлементы также могут быть вложены в несколько слоев.
[(){<><>[()]}<>()] <[{((()))}]>
Строка считается «Полностью сопоставленной», если и только если:
Каждый отдельный символ - это скобка,
Каждая пара скобок имеет правильные открывающую и закрывающую скобки и в правильном порядке
В связи с празднованием первого дня рождения «мозговых штурмов» сегодняшняя задача состоит в том, чтобы взять несбалансированный набор скобок и определить, какие типы операций необходимы для того, чтобы сделать его корректным.
Например,
((
недопустим код мозгового штурма, но если мы добавим))
к нему, он становится(())
, который полностью сбалансирован, и, следовательно, действителен мозговой зенит. Это делает этот вклад доступным .Точно так же
>}
недействительно, но мы можем предвосхитить{<
его, чтобы сделать{<>}
, что допустимо. Это делает этот вклад ожидаемым .Некоторые входные данные немного сложнее. Например,
)][({
нельзя сделать действительным только путем добавления или добавления. Но это можно сделать действительным,[(
добавив и добавив})]
. Таким образом, этот вход является одновременно prependable и appendable .Наконец, некоторые входные данные никогда не могут быть сделаны действительным кодом мозгового штурма с помощью любой комбинации добавления или добавления. Например,
(>
никогда не может быть сделано действительным. (Предварительное<
создание создает<(>
, а добавление)
создает(>)
, ни одно из которых не является действительным). Следовательно, этот ввод не является ни добавляемым, ни добавляемым.
Для сегодняшнего вызова вы должны написать программу или функцию, которая принимает строку в скобках и определяет, является ли строка
appendable
prependable
both
neither
Вы можете выбрать, какие значения вы используете для представления в каждом конкретном случае. Например, вывести 1, 2, 3, 4
, или 'a', 'p', 'b', 'n'
, или 1, 'foo', 3.1415, -17
, или как угодно. Пока каждый вывод отличается и согласован , это нормально. Однако вы должны четко указать, какой вывод соответствует какому случаю.
Вы можете вернуть это значение в любом удобном для вас формате (например, возврат из функции, печать в STDOUT, изменение аргументов, запись в файл и т. Д.).
Вы можете предположить, что входные данные никогда не будут действительными или пустыми.
Примеры
Следующие входные данные являются все возможными :
))
(((()()())))}
)>}]
()[]{}<>)
Это все можно добавить :
(({}{})
((((
([]()())(
{<<{
Это все оба :
))((
>()[(()){
>{
И это не все ни :
)(}
{(((()()()))>
[}
((((((((((>
((((((((((<>()]
Как обычно, это код-гольф , поэтому применяются стандартные лазейки, и выигрывает самый короткий ответ в байтах!
Эта задача особенно трудна в мозговых штурмах, поэтому максимальное количество брауни указывает на любой ответ, написанный в мозговых штурмах. :)
источник
maximum brownie points
Я думаю, что предлагая максимальное количество очков для брауни и печенье вместо этого поощряет Brain Flaking к этому вызову больше, чем просто очки для брауни, поскольку я не думаю, что это вообще тривиально на любом языке, не говоря уже о Brain-Flak. : P][
это не appendable, так как вы ничего не можете добавить не может сделать его действительным. Точно так же это не предсказуемо. Это ... «вставляемый»! Вы можете вставить его в строку, чтобы сделать весь действительный Brainflak.You can assume that the input will never be valid brain-flak or empty.
Ответы:
Желе ,
33 32 37 3534 байтанайдена ошибка, ужасное исправление +5 байт, лучшее исправление - 2 байта, используя трюк Аднана, который я видел здесь еще на -1.
Возвращаемые значения:
(Неверный ввод возвращает ложные результаты, хотя верный Brain-flack, возвращает
[]
.)Попробуйте онлайн! - это набор тестов (отпечатки mushed представления, поэтому
20
для[2,0]
, и игнорирует строкисодержащие любые-
).источник
Сетчатка ,
414041 байт1 байт сохранен благодаря @MartinEnder
Попробуйте онлайн!
1
0
10
01
Правки
источник
[]})>]
сохраняет байт.(][)
. Я думаю, что это может быть исправлено за счет одного байта путем изменения101
на...+
.Both
а10
это единственная действительная комбинация дляBoth
.Пакетный, 337 байт
Выходы
]
для prepend,[
для append,][
для обоих,[]
ни для того, ни для другого.источник
Хаскелл ,
115108 байтРЕДАКТИРОВАТЬ:
Попробуйте онлайн!
Используйте как
(""#) "))"
. Результаты выдаются как:Как это работает
s#d
разбирает оставшуюся строкуd
, учитывая строку / стекs
ожидаемых закрывающих скобок.s#""
проверках линии , если все закрывающие скобки были найдены в конце строки, в противном случае добавления требуется.s#(c:d)
проверяет, является ли следующий символc
открывающей скобкой, и если это так, оставляет соответствующую закрывающую скобку в стеке для рекурсии.источник
Japt , 44 байта
Выходы
1
для ожидаемых,3
для дополняемого,13
для обоих, и31
ни для одного.Проверьте это онлайн!или Проверьте все тестовые случаи одновременно.
Как это работает
источник
PHP, 137 байт
1 => добавляемый,
2 => ожидаемый,
12 => и,
0 => ни
Testcases
источник