Завтра -мозку завтра виповнюється рік! На честь цього дня народження ми проводимо день народження у стилі 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
Я думаю, що пропонування максимум очок браузера та файлів cookie замість цього стимулює Brain-Flaking це завдання більше, ніж просто окуляри брауні, оскільки я не думаю, що це зовсім не банально на будь- якій мові, не кажучи вже про Brain-Flak. : P