Herausforderung Von hier und auch hier genommen
Eine Sequenz in n Klammern besteht aus ns (
und ns )
.
Eine gültige Klammerfolge ist wie folgt definiert:
Sie können das Löschen benachbarter Klammerpaare "()" wiederholen, bis es leer wird.
Ist beispielsweise
(())
eine gültige Klammer, können Sie das Paar an der 2. und 3. Position löschen und es wird()
, dann können Sie es leer machen.)()(
ist keine gültige Klammer, nachdem Sie das Paar an der 2. und 3. Position)(
gelöscht haben , wird es und Sie können nicht mehr löschen
Aufgabe
Wenn Sie eine Zahl n angeben, müssen Sie alle korrekten Klammern in lexikografischer Reihenfolge generieren
Die Ausgabe kann ein Array, eine Liste oder eine Zeichenfolge sein (in diesem Fall eine Sequenz pro Zeile).
Sie können ein anderes Paar von Klammern wie verwenden {}
, []
, ()
oder jede open-close Zeichen
Beispiel
n = 3
((())) (()()) (())() ()(()) ()()()
n = 2
(()) ()()
quelle
1
s und-1
s) ausgeben können ?Antworten:
Perl 6 , 36 Bytes
Probieren Sie es online aus!
Finds alle lexographically Kombinationen sortiert s und filtert diejenigen , die korrekt. Beachten Sie, dass alle gültigen Kombinationen (auch solche wie ) ausgewertet werden (was falsch ist, aber wir es ( ), um von der Rückgabe zu unterscheiden ).2 n
[]
EVAL
[][]
[]
not
!
try
Nil
Erläuterung:
quelle
[][]
ist das Zen-Stück eines leeren Arrays, das das Array selbst ergibt. Das Slice kann mehrmals angewendet werden, wird also[][][][]...
ausgewertet[]
. Außerdem wird[[]]
aufgrund der Regel mit nur einem Argument kein verschachteltes Array, sondern ein leeres Array erstellt (Sie müssten[[],]
für ein verschachteltes Array schreiben ). Jede ausgeglichene Folge von[]
Klammern führt zu einem leeren Array, das zu false boolifiziert wird.R ,
11210799 BytesNicht rekursiver Ansatz. Wir verwenden "<" und ">", weil dadurch Escapezeichen in der Regex vermieden werden. Um eine kürzere Spezifikation für einen ASCII-Bereich verwenden zu können, generieren wir 3 ^ 2n 2n-Zeichenfolgen von "<", "=" und ">" mit
expand.grid
(über ihre ASCII-Codes 60, 61 und 62) und grep to Sehen Sie, welche Kombinationen ausgewogene Klammern zum Öffnen und Schließen ergeben. Die "=" - Möglichkeiten werden natürlich ignoriert.Über http://rachbelaid.com/recursive-regular-experession/
Probieren Sie es online aus!
Erläuterung
R , 107 Bytes
Üblicher rekursiver Ansatz.
-1 danke @Giuseppe
Probieren Sie es online aus!
quelle
Map
Golf zu finden , konnte aber meinen Kopf nicht darum wickeln. Ich bin nicht davon überzeugt, dassparse
+eval
seitdem funktionieren wird()()
und dergleichen Fehler werfen.C (gcc) , 114 Bytes
Probieren Sie es online aus!
Sollte für n <= 15 funktionieren.
Erläuterung
quelle
Python 2 ,
91888481 BytesProbieren Sie es online aus!
-3 Bytes dank pizzapants184
quelle
set(...)
ein festgelegtes Verständnis ({...}
) für -3 Bytes ersetzen. Probieren Sie es online aus!05AB1E , 13 Bytes
Probieren Sie es online aus oder überprüfen Sie weitere Testfälle .
Erläuterung:
quelle
Ruby , 70 Bytes
Probieren Sie es online aus!
quelle
Japt,
1513 BytesVersuch es
Erläuterung
quelle
K (ngn / k) ,
3635 BytesProbieren Sie es online aus!
+!2|&2*x
alle binären Vektoren der Länge 2 * n(x=+/)#
nur diejenigen, die zu n summieren(&/-1<+\1-2*)#
Nur diejenigen, deren Teilsummen 0/1 als 1 / -1 behandeln, sind nirgends negativ"()"
Verwenden Sie 0/1 als Indizes in dieser Zeichenfolgequelle
Perl 5
-n
,4139 Bytes-2 Bytes mit spitzen Klammern
Probieren Sie es online aus!
Port meiner Perl 6 Antwort.
quelle
Perl 6 , 42 Bytes
Probieren Sie es online aus!
Verwendet einen rekursiven regulären Ausdruck. Alternative Substitution:
S/[\(<~~>\)]*//
38 Bytes mit 0 und 1 als Öffnungs- / Schließsymbolen:
Probieren Sie es online aus!
Erläuterung
quelle
Retina 0,8,2 , 50 Bytes
Probieren Sie es online aus! Verwendet
<>
s. Erläuterung:In unary konvertieren.
Verdoppeln Sie das Ergebnis.
Zählen Sie alle 2²ⁿ 2n-Bit-Binärzahlen auf und ordnen Sie die Ziffern zu
<>
.Halten Sie nur ausgewogene Sequenzen. Dies verwendet einen von @MartinEnder entdeckten Trick mit ausgewogenen Klammern.
quelle
JavaScript (ES6),
112102 ByteDies basiert stark auf der C-Antwort von nwellnhof .
Probieren Sie es online aus!
quelle
Rot ,
214, 184,136 BytesProbieren Sie es online aus!
Verwendet Jo Kings Ansatz. Findet alle möglichen Anordnungen von Klammern mithilfe der Rekursion (sie werden in lexikografischer Reihenfolge generiert) und druckt sie aus, wenn die Anordnung als gültiger Block ausgewertet wird.
quelle
Gelee , 19 Bytes
Probieren Sie es online aus!
Ausgabe über TIO geklärt.
quelle