Вам будет предоставлена (возможно, пустая) строка, содержащая скобки ( [{()}]
) и любые другие символы ( A
- Z
, a
- z
, 0
- 9
, знаки пунктуации). Вам необходимо проверить, соответствует ли он следующим правилам:
- Не заключенные в скобки символы игнорируются.
- Каждая открытая скобка
[{(
имеет закрывающую скобку)}]
. Так[](
что не допускается. - Скобки правильно вложены.
[(])
не разрешено. - Вьющиеся скобки не могут содержать квадратные скобки внутри них. Простые скобки не могут содержать ни фигурных, ни квадратных скобок внутри них. Так
[({})]
,[{[]}]
и({})
не допускаются. Скобки могут быть вложены в одинаковые скобки, поэтому[[{((()))}{{(())}}]()]{()}
это разрешено.
Выход - единственное значение true / falsey согласно вашему выбору.
Самый короткий код выигрывает.
Контрольные примеры
b[[a{(/)}(())+={{}-}],]
-> Действительный
([h][e][l][l][o])
-> Неверный
[///[{(\/(arg()))}1{{((-)-2)}}]()]{()}
-> Действительный
hi
-> Действительный
code-golf
string
decision-problem
balanced-string
ghosts_in_the_code
источник
источник
Ответы:
Сетчатка , 84 байта
Попробуйте онлайн.
Это довольно прямолинейное (но удачное) расширение базового регулярного выражения для проверки скобок .NET .
Хотя это вполне возможно при балансировке групп, рекурсия Perl определенно имеет здесь преимущество . Тем не менее, любой из этих подходов побежден, если отбросить элегантность одного совпадения с регулярным выражением в пользу постепенного сокращения входных данных путем повторных замен, как это делает ответ Digital Trauma sed . Это может быть реализовано в 34 байта в Retina, но я не решаюсь опубликовать код сам, так как я не придумал идею.
источник
Сетчатка, 34
Во-первых, кредит, где кредит должен:
Я независимо (позже) придумал тот же подход в sed , поэтому я надеюсь, что я не наступлю ни на какие пальцы ( большие или нет), опубликовав это:
Так что теперь с
sudo apt-get install mono-complete
и уgit clone https://github.com/mbuettner/retina.git
меня есть рабочая сетчатка на моей Ubuntu VM. Вот результат теста:источник
Сед, 53
Здесь я утверждаю, что, поскольку на
sed
самом деле нет понятия истина / ложь, я определяю пустую строку как истину, а все остальные строки - как ложь.Если это не приемлемо, мы можем добавить пару строк, таким образом:
Сед, 66
Это выводит 0 для false и 1 для true.
источник
0
или1
). Я не могу сказать, кто должен опубликовать это, но это должен быть один из вас двоих.CJam,
2726 байтовЭто печатает 1 (правда) или 0 (ложь). Попробуйте онлайн! или проверьте все контрольные примеры.
Как это устроено
источник
𝔼𝕊𝕄𝕚𝕟, 43 символа / 62 байта
Try it here (Firefox only).
Нет.
Однако, если я использую недавно реализованные функции, я могу получить до 28 символов / 47 байт:
источник
Japt ,
4237 байтСохранил 5 байтов с функцией, которую я не знал, что мой родной язык был ... Спасибо за добавление, @Downgoat!
Japt действительно нуждается в лучшей поддержке RegExp ...
Попробуйте онлайн!
Как это устроено
источник
C99,
226208207 байтЯ впервые пытаюсь что-то сыграть в гольф
Удобочитаемый:
Существует переполнение буфера, но, похоже, это ни на что не влияет - я думаю, это связано с выравниванием.
источник
char* s
Perl, 50 + 1 = 51 байт
Требуется
-p
флаг и печать1
правдивых и ничего для ложных результатов. Я считаю-p
одним, потому что это может быть объединено с-e
:Код в основном представляет собой простое совпадение регулярных выражений с вводом с использованием изящной рекурсивной функции регулярных выражений Perl.
Спасибо Деннису за помощь в тестировании этого и игра в гольф Perl.
источник
Python 3: 120 байт
Опираясь на ответ @ Adnan , вы оказались короче, чтобы использовать:
источник
Python 3,
196170160154 байтаНеловко долго, спасибо Mego за сохранение 6 байтов:
источник