Dzisiaj Twoim wyzwaniem jest utworzenie wszystkich możliwych pełnych nawiasów wyrażenia.
Dane wejściowe to pojedynczy wiersz drukowalnego kodu ASCII zawierający jeden lub więcej terminów oddzielonych operatorami. Dane wejściowe mogą również zawierać spacje - należy je zignorować. Terminem jest [a-zA-Z0-9]
operator [^ ()a-zA-Z0-9]
. Możesz założyć, że dane wejściowe są zawsze prawidłowe.
Wyprowadza wszystkie możliwe sposoby pełnego nawiasowania danego wyrażenia, oddzielone znakami nowej linii z opcjonalnym znakiem końca linii.
Czy nie :
- Warunki w nawiasach - tylko w nawiasach wokół operatorów.
- Zmień kolejność warunków.
- Wyprowadzaj dowolne spacje.
Przykładowe wejście / wyjście:
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)
Najmniejszy kod w bajtach wygrywa.
!
operator? Co↑
?!
pasuje do wyrażenia regularnego, tak robi↑
, jednak↑
nie może być częścią wkładu, ponieważ nie jest do druku ASCII.Odpowiedzi:
Pyth, 38 bajtów
Wypróbuj online.
Definiuje funkcję rekurencyjną, która:
Następnie wywoływana jest funkcja z ciągiem wejściowym z usuniętymi spacjami, a do wyników dołączane są znaki nowej linii.
źródło
JavaScript (ES6),
208197 bajtówWyjaśnienie
Używa funkcji rekurencyjnej, która pobiera tablicę
[ t, o, t, o, etc... ]
i nawiasuje każdą kolejną parę dwóch terminów razem, podobnie jak[ (tot), o, etc... ]
i powtarza ten proces, dopóki nie będzie tylko jednego elementu w tablicy, a następnie odfiltruje duplikaty wartości.Test
Pokaż fragment kodu
źródło