На основании НАСТОЯЩЕГО вопроса.
Для ()[]{}<>
данной строки замените каждую скобку скобкой соответствующего типа так, чтобы скобки совпадали, и вложенные скобки циклически выполняются следующим образом:
- Внешние из них
()
- Прямо внутри
()
должно быть[]
- Прямо внутри
[]
должно быть{}
- Прямо внутри
{}
должно быть<>
- Прямо внутри
<>
будет()
снова (циклы)
Все символы, не являющиеся скобками, должны оставаться такими же, как они. Открытые скобки могут быть заменены только открытыми скобками некоторого типа, а закрывающие скобки - закрывающими скобками.
Ввод всегда сделает это возможным. Это означает, что его скобки совпадают, если их тип игнорируется. Таким образом, {ab<)c]
это правильный вход, но ab)(cd
или ab((cd
нет.
Примеры:
2#jd {¤>. = 2#jd (¤).
abcdef = abcdef
(3×5+(4-1)) = (3×5+[4-1])
<<<>><<>><<<<<<>>>>>>> = ([{}][{}][{<([{}])>}])
Использование встроенного преобразования ввода таким способом (автоматический синтаксис языка) не допускается.
Как всегда: самый короткий код выигрывает.
code-golf
string
balanced-string
Дирк Райхель
источник
источник
Ответы:
JavaScript (ES6), 79 байт
Контрольные примеры
Показать фрагмент кода
источник
Lex, 132 байта
источник
flex
в качестве компилятора), удалив последние две или три строки соответственно, за счет некоторого количества байтов (вероятно, 2, 3 или 4; правила несколько неясны) в штрафах за параметр-ll
командной строки при связывании результирующего файла C. (То есть вместо компиляцииlex brackets.l; cc lex.yy.c
вы компилируетеlex brackets.l; cc lex.yy.c -ll
.) Это определенно компромисс, который стоит сделать в этой ситуации.Java, 155 байт
Лямбда, которая принимает в
char[]
качестве единственного аргумента. Мы перебираем массив, сохраняя его позицию в нашей строке скобок (s
) в переменной (k
). Мы проверяем, является ли это открывающей или закрывающей скобкой (s.indexAt()
), и заменяем ее соответствующей скобкой, исходя из уровня вложенности (s.charAt()
), соответствующим образом повторяя%4
источник
Haskell, 126 байт
Попробуйте это на Ideone. Применение:
объяснение
f
принимает три аргумента: строка, которая работает как стек для закрывающих скобок, intn
для подсчета глубины вложения и входная строка.источник