«Тройка скобок» (которую я составил для этого испытания) является одним из следующих:
(...+...)
[...:...]
{...|...}
<...-...>
Сбалансированная строка триплетных скобок (для краткости BTBS) представляет собой либо пустую строку, две сцепленные BTBS, либо одну из указанных выше тройных скобок, каждая из которых ...
заменяется на BTBS.
Ваша задача - написать программу или функцию, которая проверяет, (+)[:]{|}<->
сбалансирована ли строка, состоящая только из одной строки . Самый короткий код выигрывает.
Примеры
Ваша программа должна вернуть truey для следующих строк:
(+)(+)(+)
[[[:]:]:(+(+))]{<->|<(+)->[:]}(+)
<<<<<<<<<<<<->->->->->->->->->->->->
{|(+[:<-{|(+[:<->])}>])}
[[[:]:[:]]:[[:]:[:]]]
{[:](+)|<->{|}}[(+)<->:{|}(+)]
Ваша программа должна возвращать ложные значения для следующих строк:
:[
<|>
(+(+)
[:][:](+[[:]):]
{|{|{|(+{|{|{|}}}}}+)}[:]{|}
{{||}}
<<->-<->-<->>
[(+):((+)+)+(+(+))]
<<<<<->->->->->->
code-golf
string
balanced-string
jimmy23013
источник
источник
(|)
действительным. Я так не думаю, но я не уверен<|>
в ложных примерах.Ответы:
Japt, 25 байт
Проверьте это онлайн!
e
в строках - это функция рекурсивного замещения. Второй параметр по умолчанию равен пустой строке, что означает, что это рекурсивно удаляет совпадения регулярного выражения Japt"%(%+%)|%[:]|\{%|}|<->"
(в обычных терминах,/\(\+\)|\[:]|{\|}|<->/
). Это возвращает пустую строку для сбалансированных триплетных строк и непустую строку для несбалансированных, поэтому правильное возвращаемое значение является логическим НЕ этого.источник
JavaScript (ES6),
77585756 байтКонтрольные примеры
Показать фрагмент кода
источник
perl -lpe 's/<->|\(\+\)|{\|}|\[:]//&&redo;$_=!$_'
.0
BTBS. Вместо этого используйте 38:perl -pe 's/<->|\(\+\)|{\|}|\[:]//&&redo;$_=/^$/'
f=s=>s==(s=s.replace(...))?!s:f(s)
?sed,
2827 байтовУ sed нет понятия истина / ложь, поэтому я рассматриваю пустую строку как истину и непустую ложную строку. Это проверяет, если мы считаем условным
/^$/
.Спасибо @Neil за игру в 1 байт!
Попробуйте онлайн!
источник
\]
или]
достаточно?Python, 77 байт
Использует идею замены Арно . Генерирует и оценивает длинную строку как
цикл между заменой всех типов кронштейнов. Затем проверяет, является ли результат пустой строкой.
источник
Mathematica, 55 байт
Анонимная функция. Принимает строку как ввод и возвращает
True
илиFalse
как вывод. Использует стандартный метод для этого.источник
Грязь , 39 байт
Попробуйте онлайн! К сожалению, версия TIO не хватает памяти в большинстве тестовых случаев.
объяснение
Здесь нет ничего особенного.
_
является сокращением для всего шаблона иv*
является таким же, как*
, но с более низким приоритетом.источник
J, 48 байтов
Подобно другим, это также основано на методе Арно .
использование
объяснение
источник
Скала, 96 байт
Это в основном та же идея, что и в других ответах, но с некоторыми шаблонами scala.
без кражи идей у других (188 байт):
источник
Пип , 26 байт
Попробуйте онлайн!
Обрабатывает len (a) раз, заменяя все вхождения пустых триплетных скобок (
"(+)[:]{|}<->"<>3
где<>
оператор "group" =>["(+)"; "[:]"; "{|}"; "<->"]
) пустой строкой (x
). Это много итераций - излишне, но этого всегда будет более чем достаточно, чтобы полностью свести все правильно сформированные триплетные скобки к нулю. После завершения цикла выдает!a
:0
ifa
is true (по-прежнему содержит несколько символов),1
ifa
- false (пусто).источник