Исправить скобки и т. Д.


15

Ваша миссия, если вы решите принять его, чтобы добавить в минимальное количество скобок, скобки, и скобки , чтобы сделать данную строку (содержащую только круглые скобки, фигурные скобки, и скобки) имеют правильное соответствие скобок. Связи добавленных символов должны быть разорваны с помощью максимального расстояния между парными скобками. Вы должны вернуть только один правильный ответ, который соответствует этим двум правилам; Дальнейшие связи, если они существуют, могут быть разорваны любым удобным для вас способом.

Примеры:

input      output
                          // Empty String is a legal input
[          []             // Boring example
[()]       [()]           // Do nothing if there's nothing to be done
({{        ({{}})         // NOT (){}{} (0 + 0 + 0). Maximum distance is 4 + 2 + 0, ({{}})
[([{])]}   {[([{}])]}     // NOT [([])]{[([])]} or similar

Вы можете написать программу или функцию , получить входные данные через STDIN в качестве строкового аргумента вашей функции, которая возвращает выходные данные в виде строки или печатает их в STDOUT (или ближайшую альтернативу). При желании вы можете включить один завершающий символ новой строки в вывод.

Вы можете предположить, что входная строка состоит только из следующих 6 символов (или их отсутствия): [](){}(поддержка не требуется <>)

Это , выигрывает самая короткая программа. Стандартные лазейки запрещены, конечно .


Вы хотели повторить заголовок непосредственно под фактическим заголовком или повторить тег прямо над фактическими тегами? Просто спрашиваю, скопировали ли вы вставленную из Песочницы копию и забыли удалить их.
Рейнболт

@Rainbolt Первое нет (песочница), второе да
durron597

1
@AlexA. Я вижу, как они незначительно отличаются, но я думаю, что они слишком похожи, чтобы их можно было рассматривать как отдельные вопросы.
NinjaBearMonkey

Справедливо. Это, конечно, не просто, и я не буду преследовать закрытие, если другие решат не делать этого.
NinjaBearMonkey

Я бы посчитал это достаточно другим. Проголосовал за открытие.
nderscore

Ответы:


1

Питон 2 - 198

Я надеялся немного углубить понимание, но сейчас у меня не так много времени, чтобы по-настоящему испытать разные способы ведения дел.

s="()[]{}";f=s.find
def F(S):
 r=m=""
 for c in S:
    i=f(c)^1
    if i%2:m=c+m;r+=c
    else:
     for d in m:
        if d==s[i]:break
        r+=s[f(d)^1]
     else:r=s[i]+r+c
     m=m[1:]
 for c in m:r+=s[f(c)^1]
 return r

OP не включал пример, подобный {[([{}])]}{[(со смежными группами), но если эта функциональность требуется или нет, это выводит правильный{[([{}])]}{[]}


Как это 198 байтов?
Захари

@ZacharyT, tabs ( \t) форматируется как 4 пробела при переполнении стека, но я на самом деле чередую табуляции и пробелы (вы можете сделать это для уровней отступов в Python 2, а не 3), поэтому первый уровень - [space]второй, [tab]третий - [tab][space]четвертый [tab][tab]. Ввод кода с пробелами дает мне 227 отсюда mothereff.in/byte-counter , и я считаю 10 вкладок, так что 227 - (3 * 10) = 197. Да, я думаю, что на самом деле я перебрал 1 путь назад, когда я разместил это.
KSab

Данг! Это действительно хороший трюк. (Введите в конце строки). Вы можете объединить нижний цикл for и оператор return для return r+[s[f(c)^1]for c in m]сохранения байтов.
Захари

1

Хаскелл, 513

Функция h. Предыдущая версия не давала правильных ответов "({{)["и"({{)}}"

import Control.Monad

m '('=')'
m '['=']'
m '{'='}'
m ')'='('
m ']'='['
m '}'='{'

data B=B Char[B]|N[B]|Z B Char[B]
instance Eq B where(==)a b=q a==q b
instance Ord B where(<=)a b=q a<=q b

w(B o s)=o:(s>>=w)++[m o]
v(N k)=k>>=w
n(B _ k)=(sum$n<$>k)+1
q(N k)=sum$n<$>k

u(Z(Z g pc pk) c k)=Z g pc(pk++[B c k])
u(Z(N pk) c k)=N(pk++[B c k])
t(N k)=N k
t z=t$u z

f z c|elem c "([{"=[Z z c[]]
f z@(Z p o k) c|m c==o=[u z]|2>1=(u$Z(Z p o [])(m c)k):f(u z)c
f (N k)c=[Z(N[])(m c)k]

h s=v.minimum$t<$>foldM f(N [])s
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.