假设有一天,您正在翻阅一大盒未使用的计算机线和适配器(USB到USB mini,VGA到DVI等)。到处都有缠结的电线,使情况变得一团糟,您想知道是否可以通过将所有电线绑成一长串然后将其卷起来来简化事情。
问题是,是否可以像这样将所有电线和适配器连接成一条长线?显然并非总是可能的,例如,如果您只有两条完全不同的插头的电线,则它们无法连接在一起。但是,如果您有第三条可以同时连接到它们的电线,则可以将所有电线捆扎在一起。
您不必担心全绳线末端的插头类型。他们不需要互相插入就可以形成一个循环。您只想知道是否可以制作全绳缆绳,如果可以,如何做。
挑战
编写一个包含多行字符串的程序或函数,其中每行都描述您拥有的一根电线。电线由一个或多个破折号(-
)组成,两端均带有插头。插头始终是8个字符之一()[]{}<>
。
因此,以下是一些有效的方法:
>->
(--[
}-{
<-----]
(---)
但是这些不是:
-->
(--
)--
[{
---
连接电线时,只能将支架类型完全相同的插头连接在一起。
因此,以下是一些有效的电线连接:
...---((---...
...---))---...
...---]]---...
...---{{---...
...---<<---...
这些是无效的:
...---()---...
...---)(---...
...---{]---...
...---{[---...
...---><---...
...--->)---...
如果输入中的所有软线都可以重新排列并连接成一长串,则将其输出到一行上的stdout(带有可选的尾随换行符)。如果有多种解决方案,则可以选择其中一种进行输出。如果无法制作单条链,则不输出任何内容(或输出带有可选尾随换行符的空字符串)。
例如,如果输入是
[-->
{---]
>----{
输出可能是
[-->>----{{---]
所有的电线都缠绕在一起。
但是如果输入是
[-->
{---]
电源线无法连接,因此没有输出。
请注意,电线可以尽可能多地翻转以进行连接。例如[-->
,<--]
并且实际上是同一根电线,因为它们可以进行相同类型的连接。某些输出可能取决于翻转输入线。
例如
(-[
}--]
可能有输出
(-[[--{
第二根线被翻转的地方,或者
}--]]-)
第一根线被翻转的位置。
(请注意,一般而言,翻转整个输出是有效的,因为这与最初单独翻转每条电源线相同。)
当然,输出中线的长度应与相应输入线的长度匹配。但是,可以将绳索重新排序,并根据需要进行任意翻转,以制作全帘线。输入将始终包含至少一根电源线。
以字节为单位的最短代码获胜。
测试用例
输出案例:
[-->
{---]
>----{
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.
没有输出的情况:
[-->
{---]
[-]
[-]
(-]
]->
}-)
>->
>-->
]---]
[-------------------]
]-------------------[
[-----------------]
[-----------------]
{--[
]--}