Ktoś dał nam ciąg znaków, ale wszystkie znaki podobne do nawiasów zostały zmienione na normalne i nie wiemy, które, a nawet ile ich było. Wiemy tylko, że gdyby L1,L2,L3,...,LN
były różnego rodzaju lewe nawiasy i R1,R2,R3,...,RN
były różnymi odpowiednimi rodzajami prawym nawiasami, wszystkie byłyby odrębne (2N znaki odrębnych nawiasów), łańcuch byłby prawidłowy, jeśli jest jednym z (+ jest normalnym połączeniem łańcucha):
L1+X+R1
,,L2+X+R2
...,LN+X+RN
gdzieX
jest prawidłowym ciągiem,X+Y
, gdzieX
iY
są poprawnymi ciągami,Dowolny pojedynczy znak, który nie jest znakiem nawiasu.
Pusty ciąg
Wiemy, że zaczęli od prawidłowego ciągu przed zmianą nawiasów i nie zmienili ich na żadne znaki, które już istniały w ciągu. Dla każdego przedziału istniała również co najmniej jedna para. Czy potrafisz odtworzyć, które postacie były pierwotnie lewą i prawą parą nawiasów (znajdź Li
i Ri
przestrzegaj podanych warunków)?
Wyprowadza pary znaków, które były nawiasami. Na przykład, jeśli (){}[]
faktycznie są znakami nawiasów, możesz wyprowadzać (){}[]
lub {}[]()
lub [](){}
, itd. Może być wiele sposobów, aby to zrobić dla łańcucha, wystarczy zwrócić jeden taki, aby nie było przypisania nawiasów z większą liczbą par (patrz przykłady). Zauważ, że ciąg wyjściowy powinien zawsze mieć parzystą długość.
Przykłady:
abcc
- c
nie może być nawiasem, ponieważ nie ma innej postaci z dwoma wystąpieniami, ale ab
może być parą nawiasów, więc wynik byłby dokładny ab
.
fffff
- jakikolwiek ciąg z co najwyżej jednym znakiem nie może zawierać nawiasów, więc zwrócisz pusty ciąg lub nic nie wyświetlisz.
aedbedebdcecdec
- ten ciąg nie może zawierać nawiasów, ponieważ jest 1 a, 2 bs, 3 cs, 4 ds i 5 es, więc żadne dwa znaki nie występują tyle samo razy, co jest wymagane, aby mieć nawiasy.
abcd
- Możliwe są zadania ab
, cd
, abcd
, cdab
, adbc
, bcad
, ac
, ad
, bc
i bd
, (jak również pustego przydziału, które z nich), ale należy zwrócić jeden z najdłuższych zadań, więc musisz wrócić abcd
, cdab
, adbc
, lub bcad
.
aabbcc
, abc
- to obie mają ab
, ac
i bc
jako ważnych parach. Musisz zwrócić jedną z tych par, nieważne która.
abbac
- aib mają taką samą liczbę znaków, ale nie mogą faktycznie działać, ponieważ jeden z nich występuje zarówno po lewej, jak i po prawej stronie wszystkich wystąpień drugiego. Nic nie zwracaj.
aabcdb
- cd
i ab
są dokładnie dwiema parami nawiasów, więc wyprowadzaj albo cdab
albo abcd
.
abcdacbd
- tylko jedna para może zostać osiągnięty na raz, ale ab
, ac
, bd
, cd
, i ad
są wszystkie możliwe pary można powrócić. Bez względu na to, która para wybrać, ma instancji, gdzie jeden inny znak jest w nim, który zakazuje wszelkich innych par, z wyjątkiem przypadku ad
, gdy inne pary bc
i cb
nie są możliwe albo sam, a więc nie może być możliwe z ad
.
To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach. Dane wejściowe pochodzą ze STDIN, jeśli to możliwe dla twojego języka. Jeśli nie jest to możliwe, wskaż metodę wprowadzania w swojej odpowiedzi.
źródło
abcd
wyjścieadbc
byłoby również do przyjęcia, prawda?Odpowiedzi:
Rubinowy, 373 bajtów
Ten wykorzystuje golfed wersję parsera stosu tutaj .
Prawdopodobnie można to jeszcze bardziej uprościć, ale nie sądzę, aby mój mózg mógł sobie z tym poradzić.
Wszystkie przypadki testowe: http://ideone.com/gcqDkK
Z białymi znakami: http://ideone.com/pLrsHg
Ungolfed (głównie): http://ideone.com/oM5gKX
źródło