Heute besteht Ihre Herausforderung darin, alle möglichen vollständigen Klammern eines Ausdrucks zu erstellen.
Ihre Eingabe ist eine einzelne Zeile druckbaren ASCII, die einen oder mehrere durch Operatoren getrennte Begriffe enthält. Die Eingabe kann auch Leerzeichen enthalten - Sie müssen diese ignorieren. Ein Begriff ist [a-zA-Z0-9]
, ein Operator ist [^ ()a-zA-Z0-9]
. Sie können davon ausgehen, dass die Eingabe immer gültig ist.
Geben Sie alle möglichen Möglichkeiten aus, um den angegebenen Ausdruck vollständig in Klammern zu setzen, getrennt durch Zeilenumbrüche mit einem optionalen nachgestellten Zeilenumbruch.
Haben nicht :
- Begriffe in Klammern - nur in Klammern um Operatoren.
- Ordnen Sie die Bedingungen neu.
- Geben Sie Leerzeichen aus.
Beispiel Eingabe / Ausgabe:
N
N
a * b
(a*b)
x_x_0
(x_(x_0))
((x_x)_0)
a * b|c|d
(a*(b|(c|d)))
(a*((b|c)|d))
((a*b)|(c|d))
((a*(b|c))|d)
(((a*b)|c)|d)
Der kleinste Code in Bytes gewinnt.
!
ein Betreiber? Was ist mit↑
?!
passt zur Regex,↑
kann aber↑
auch nicht Teil der Eingabe sein, da es kein druckbares ASCII ist.Antworten:
Pyth, 38 Bytes
Probieren Sie es online aus.
Es definiert eine rekursive Funktion, die:
Die Funktion wird dann mit der Eingabezeichenfolge aufgerufen, wobei Leerzeichen entfernt werden, und die Ergebnisse werden durch Zeilenumbrüche verbunden.
quelle
JavaScript (ES6),
208197 BytesErläuterung
Verwendet eine rekursive Funktion, die ein Array von
[ t, o, t, o, etc... ]
und nimmt jedes aufeinanderfolgende Paar von zwei Begriffen in Klammern zusammen[ (tot), o, etc... ]
und wiederholt diesen Vorgang, bis nur noch ein Element im Array vorhanden ist, und filtert dann die doppelten Werte heraus.Prüfung
Code-Snippet anzeigen
quelle