Na tej stronie znajduje się kilka pytań dotyczących równoważenia nawiasów i sprawdzania, czy nawiasy są zrównoważone. Proponuję, że teraz nadszedł czas, aby użyć tych zrównoważonych nawiasów do czegoś!
W matematyce i programowaniu nawiasy kwadratowe są jak bańki, izolując wszystko w środku od wszystkiego na zewnątrz, dzięki czemu wszystko, co jest w środku, może robić swoje w spokoju, a wszystko na zewnątrz widzi tylko jeden obiekt. Jednak ciąg nawiasów jest jednowymiarowy, podczas gdy bąbelki zwykle są co najmniej dwuwymiarowe. Oznacza to, że bąbelki mogą się swobodnie przemieszczać wokół siebie, o ile nigdy się nie dotykają ani nie przechodzą między wnętrzem a zewnętrzem innych pęcherzyków.
Wyzwanie
Dane wejściowe to ciąg pasujących nawiasów pojedynczego typu, okrągłych ()
, kwadratowych []
, kręconych {}
lub kątowych <>
. Od Ciebie zależy, jaki program chcesz zaakceptować, a program, który akceptuje tylko jeden rodzaj nawiasów, jest akceptowany. (Imaginacyjny bonus, jeśli twój program może obsłużyć którykolwiek z nich, ogromne wymyślone punkty bonusowe, jeśli może obsłużyć je wszystkie na tym samym wejściu.) Dane wejściowe nie mogą zawierać niczego między nawiasami, chociaż dozwolone są końcowe białe spacje.
Wyjściem są wszystkie możliwe reorganizacje (w dowolnej kolejności, w tym oryginalne dane wejściowe) tych nawiasów, które dają tę samą konfigurację bąbelków, bez dwóch identycznych ciągów. Oznacza to, że przy wejściu ()()
wartość wyjściowa jest również sprawiedliwa ()()
, chociaż technicznie są to dwa bąbelki, które mogłyby zamieniać się miejscami. W przypadku ogromnej wymyślonej premii wejście {}[]()
woli prowadzi oczywiście do uzyskania 6 różnych elementów / ciągów / linii.
Dwie konfiguracje bąbelków są „takie same”, jeśli możesz zrobić jeden do drugiego, przesuwając bąbelki, nie pozwalając, aby jakikolwiek bąbelek przeciął się z innego bąbla na zewnątrz lub z zewnątrz do wewnątrz. Jeśli porównasz zagnieżdżone nawiasy do drzew (każda dopasowana para jest jednym węzłem, a każda dopasowana para w obrębie jest podwęzłem, a każda dopasowana para w obrębie jest ponownie podwęzłem itd.), Gdzie uporządkowane są podwęzły dowolnego danego węzła , wówczas pojedyncza konfiguracja bąbelków to drzewo, w którym węzły są nieuporządkowane.
Dowolny rozsądny format wyjściowy, na przykład zwrócenie listy ciągów znaków lub listy pojedynczych znaków lub pojedynczego ciągu znaków z pewnego rodzaju białymi spacjami , lub drukowanie do stdout
lub stderr
z jakąś formą widocznych białych znaków (najczęściej nowa linia lub spacja) pomiędzy każda reorganizacja.
Końcowe spacje dla każdej reorganizacji oraz końcowe i poprzedzające elementy nowej linii / pustej listy przed i po dozwoleniu rzeczywistych wyników. Powinieneś używać tego samego rodzaju nawiasów wyjściowych, co akceptujesz w danych wejściowych. Poza nawiasami, znakami nowej linii i spacjami, jak określono tutaj, i niezależnie od użytego separatora, nic nie powinno być drukowane (w tym znaki niewidoczne / o zerowej szerokości).
Wynik to liczba bajtów w kodzie; najniższa liczba wygranych dla każdego języka. Możesz zauważyć, czy otrzymasz wymyśloną premię, zwykłą czy ogromną, ale nie wpływa to na twój wynik. Rzeczywiste bonusy są zbyt trudne do zrównoważenia.
Przykłady przepływów międzygałęziowych
Przykład 1:
Wkład:
()(())
Wydajność:
()(())
(())()
Przykład 2:
Wkład:
(()())()()
Wydajność:
(()())()()
()(()())()
()()(()())
Przykład 3:
Wkład:
(()(()))()
Wydajność:
((())())()
()((())())
(()(()))()
()(()(()))
((()))
w przykładzie 1? czy()()()
? Wygląda na to, że brakuje Ci permutacji dla każdego wejścia.