Załóżmy, że pewnego dnia przekopujesz się przez duże pudło nieużywanych kabli komputerowych i adapterów (USB na USB mini, VGA na DVI itp.). Wszędzie są splątane sznury, które robią niezły bałagan, i zastanawiasz się, czy możesz uprościć rzeczy, łącząc wszystkie sznury w jedną długą nić, a następnie po prostu zwijając.
Pytanie brzmi, czy możliwe jest połączenie wszystkich przewodów i adapterów w jedną długą linię taką jak ta? Oczywiście nie zawsze jest to możliwe, np. Jeśli masz tylko dwa przewody z całkowicie różnymi wtyczkami, nie można ich ze sobą połączyć. Ale jeśli masz trzeci przewód, który można podłączyć do obu z nich, możesz połączyć wszystkie przewody razem.
Nie obchodzi Cię, jakiego rodzaju wtyczki znajdują się na końcach nici typu all-cord. Nie muszą się ze sobą łączyć, aby utworzyć pętlę. Chcesz tylko wiedzieć, czy możliwe jest wykonanie nici z przewodem, a jeśli tak, to jak to zrobić.
Wyzwanie
Napisz program lub funkcję, która pobiera ciąg wielowierszowy, w którym każda linia przedstawia jeden z posiadanych przewodów. Przewód składa się z jednego lub więcej myślników ( -), z wtyczką po obu stronach. Wtyczka jest zawsze jednym z 8 znaków ()[]{}<>.
Oto niektóre prawidłowe przewody:
>->
(--[
}-{
<-----]
(---)
Ale to nie są:
-->
(--
)--
[{
---
Podczas podłączania przewodów można łączyć ze sobą tylko wtyczki dokładnie tego samego typu wspornika.
Oto niektóre prawidłowe połączenia kablowe:
...---((---...
...---))---...
...---]]---...
...---{{---...
...---<<---...
A te są nieprawidłowe:
...---()---...
...---)(---...
...---{]---...
...---{[---...
...---><---...
...--->)---...
Jeśli wszystkie sznury na wejściu mogą zostać uporządkowane i połączone razem w jedną długą nić, wyprowadzić tę nić na stdout w jednym wierszu (z opcjonalnym końcowym znakiem nowej linii). Gdy istnieje wiele rozwiązań, możesz wybrać jedno z nich do wydrukowania. Jeśli utworzenie pojedynczej nici nie jest możliwe, nic nie wypisz (lub wypisz pusty ciąg z opcjonalnym końcowym znakiem nowej linii).
Na przykład, jeśli dane wejściowe to
[-->
{---]
>----{
wyjście może być
[-->>----{{---]
gdzie wszystkie sznury są ze sobą połączone.
Jednak jeśli dane wejściowe były
[-->
{---]
przewody nie mogą być podłączone, więc nie będzie wyjścia.
Należy pamiętać, że sznury można odwrócić tak bardzo, jak to konieczne do wykonania połączeń. np. [-->i <--]są faktycznie tym samym przewodem, ponieważ mogą wykonywać ten sam typ połączeń. Niektóre wyjścia mogą zależeć od odwrócenia przewodów wejściowych.
Na przykład
(-[
}--]
może mieć wynik
(-[[--{
gdzie drugi przewód jest odwrócony, lub
}--]]-)
gdzie pierwszy przewód jest odwrócony.
(Zauważ, że ogólnie przerzucanie całego wyjścia jest poprawne, ponieważ jest takie samo, jak początkowo przerzucanie każdego przewodu osobno).
Długości przewodów wyjściowych powinny oczywiście odpowiadać długości odpowiednich przewodów wejściowych. Ale sznury mogą być ponownie uporządkowane i odwrócone tak, jak chcesz, aby uzyskać pasmo wszystkich kabli. Wejście zawsze będzie zawierało co najmniej jeden przewód.
Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
Obudowy z wyjściem:
[-->
{---]
>----{
gives
[-->>----{{---]
or
[---}}----<<--]
(-[
}--]
gives
(-[[--{
or
}--]]-)
(-)
gives
(-)
[--{
gives
[--{
or
}--]
[-]
]-[
gives
[-]]-[
or
]-[[-]
[----->
)------------[
{--<
}---)
could give
[----->>--}}---))------------[
or
>--}}---))------------[[----->
or
}---))------------[[----->>--}
or
{--<<-----]]------------((---{
etc.
>-->
>->
>--->
could give
>-->>->>--->
or
>--->>-->>->
or
>->>-->>--->
or
<--<<---<<-<
etc.
(-]
]->
>-}
}-)
)-[
[-<
<-{
{-(
could give
(-]]->>-}}-))-[[-<<-{{-(
or
{-((-]]->>-}}-))-[[-<<-{
or
<-{{-((-]]->>-}}-))-[[->
etc.
Obudowy bez wyjścia:
[-->
{---]
[-]
[-]
(-]
]->
}-)
>->
>-->
]---]
[-------------------]
]-------------------[
[-----------------]
[-----------------]
{--[
]--}
