Вызов взят здесь, а также здесь
Последовательность из n скобок состоит из n (
s и n )
s.
Допустимая последовательность скобок определяется следующим образом:
Вы можете найти способ повторить удаление соседней пары скобок "()", пока она не станет пустой.
Например,
(())
это допустимые скобки, вы можете стереть пару на 2-й и 3-й позиции, и она становится()
, тогда вы можете сделать ее пустой.)()(
недопустимые скобки, после того, как вы удалите пару на 2-й и 3-й позиции, она становится,)(
и вы больше не можете стереть
задача
Учитывая число n, вам нужно сгенерировать всю правильную последовательность скобок в лексикографическом порядке.
Вывод может быть массивом, списком или строкой (в данном случае последовательность на строку)
Вы можете использовать другую пару скобок , таких как {}
, []
, ()
или любого открытого близко знаком
пример
n = 3
((())) (()()) (())() ()(()) ()()()
п = 2
(()) ()()
источник
1
s и-1
s)?Ответы:
Perl 6 , 36 байт
Попробуйте онлайн!
Находит все лексографически отсортированные комбинации2 н
[]
и фильтрует те, которыеEVAL
правильно. Обратите внимание, что все действительные комбинации (даже такие как[][]
) оцениваются как[]
(что неверно, но мыnot
это (!
) отличаем отtry
возвращаемыхNil
)Объяснение:
источник
[][]
это дзенский фрагмент пустого массива, который возвращает сам массив. Срез может быть применен несколько раз, поэтому[][][][]...
оценивается[]
. Кроме того,[[]]
не строит вложенный массив, но пустой массив из-за правила единственного аргумента (вы должны написать[[],]
для вложенного массива). Таким образом, любая сбалансированная последовательность[]
скобок приводит к пустому массиву, который превращается в false.R ,
11210799 байтНерекурсивный подход. Мы используем "<" и ">", потому что он избегает escape-символов в регулярном выражении. Чтобы позволить нам использовать более короткую спецификацию для диапазона ASCII, мы генерируем 3 ^ 2n 2n-символьных строк "<", "=" и ">", используя
expand.grid
(через их коды ASCII 60, 61 и 62), а затем выполняем команду grep для посмотрите, какие комбинации дают сбалансированные открывающие и закрывающие скобки. Конечно, возможности "=" будут игнорироваться.Через http://rachbelaid.com/recursive-regular-experession/
Попробуйте онлайн!
объяснение
р , 107 байт
Обычный рекурсивный подход.
-1 спасибо @Giuseppe
Попробуйте онлайн!
источник
Map
гольф, но не мог обернуть голову вокруг него. Я не убежден, чтоparse
+eval
будет работать с тех пор()()
и тому подобное.C (gcc) , 114 байтов
Попробуйте онлайн!
Должно работать для n <= 15.
объяснение
источник
Python 2 ,
91888481 байтПопробуйте онлайн!
-3 байта благодаря pizzapants184
источник
set(...)
набором compreatsion ({...}
) на -3 байта. Попробуйте онлайн!05AB1E , 13 байтов
Попробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
источник
Рубин , 70 байт
Попробуйте онлайн!
источник
Japt,
1513 байтПопробуй это
объяснение
источник
K (нгн / к) ,
3635 байтПопробуйте онлайн!
+!2|&2*x
все двоичные векторы длины 2 * n(x=+/)#
только те, которые суммируются(&/-1<+\1-2*)#
только те, чьи частичные суммы, рассматривающие 0/1 как 1 / -1, нигде не являются отрицательными"()"
используйте 0/1 в качестве индексов в этой строкеисточник
Perl 5
-n
,4139 байт-2 байта с угловыми скобками
Попробуйте онлайн!
Порт моего Perl 6 ответа.
источник
Perl 6 , 42 байта
Попробуйте онлайн!
Использует рекурсивное регулярное выражение. Альтернативная замена:
S/[\(<~~>\)]*//
38 байтов с 0 и 1 в качестве символов открытия / закрытия:
Попробуйте онлайн!
объяснение
источник
Сетчатка 0.8.2 , 50 байт
Попробуйте онлайн! Использует
<>
с. Объяснение:Преобразовать в одинарный.
Удвойте результат.
Перечислите все 2 × 2n-битные двоичные числа, сопоставляя цифры с
<>
.Храните только сбалансированные последовательности. Это использует трюк со сбалансированными скобками, обнаруженный @MartinEnder.
источник
JavaScript (ES6),
112102 байтаЭто в значительной степени основано на C-ответе nwellnhof .
Попробуйте онлайн!
источник
Красный ,
214, 184136 байтПопробуйте онлайн!
Использует подход Джо Кинга. Находит все возможные расположения скобок с использованием рекурсии (они генерируются в лексикографическом порядке) и распечатывает его, если расположение оценивается как действительный блок.
источник
Желе , 19 байт
Попробуйте онлайн!
Вывод уточнен по ТИО.
источник