ある日、未使用のコンピューターコードとアダプター(USBからUSB mini、VGAからDVIなど)の大きな箱を掘っていると仮定します。絡み合ったコードがいたるところに散らかっているので、すべてのコードを1本の長いストランドにまとめて、それを巻き上げるだけで物事を単純化できるかどうか疑問に思います。
問題は、すべてのコードとアダプターをこのように1本の長いラインで接続することは可能ですか?明らかに、常に可能なわけではありません。たとえば、プラグがまったく異なる2本のコードしかない場合、それらを接続できませんでした。しかし、両方に接続できる3つ目のコードがあれば、すべてのコードをつなぎ合わせることができます。
全コードより線の端にあるプラグの種類は気にしません。ループを形成するために互いに接続する必要はありません。あなたは、すべてのコードのストランドを作ることが可能かどうか、可能であれば、それをどのように行うかを知りたいだけです。
チャレンジ
すべての行が所有するコードの1つを表す複数行の文字列を取り込むプログラムまたは関数を作成します。コードは、1つ以上のダッシュ(-
)で構成され、両端にプラグが付いています。プラグは常に8文字の1つです()[]{}<>
。
これらはいくつかの有効なコードです:
>->
(--[
}-{
<-----]
(---)
しかし、これらはそうではありません:
-->
(--
)--
[{
---
コードを接続する場合、まったく同じブラケットタイプのプラグのみを接続できます。
したがって、これらは有効なコード接続です。
...---((---...
...---))---...
...---]]---...
...---{{---...
...---<<---...
そして、これらは無効です。
...---()---...
...---)(---...
...---{]---...
...---{[---...
...---><---...
...--->)---...
入力内のすべてのコードを並べ替えて1つの長いストランドにまとめて接続できる場合は、そのストランドを1行のstdoutに出力します(オプションの末尾の改行を使用)。複数のソリューションがある場合、それらのいずれかを選択して出力できます。単一のストランドを作成できない場合は、何も出力しません(または、オプションの末尾の改行を含む空の文字列を出力します)。
たとえば、入力が
[-->
{---]
>----{
出力は
[-->>----{{---]
すべてのコードが一緒に張られています。
ただし、入力が
[-->
{---]
コードは接続できないため、出力はありません。
接続に必要なだけコードをひっくり返すことができることに注意してください。例えば[-->
とは<--]
、彼らが接続の同じ種類を作ることができるので、効果的に同じコードです。一部の出力は、入力コードの反転に依存する場合があります。
例えば
(-[
}--]
出力できる
(-[[--{
2番目のコードが反転している場所、または
}--]]-)
最初のコードが反転します。
(一般に、最初にすべてのコードを個別にフリップするのと同じであるため、出力全体をフリップすることは有効です。)
もちろん、出力のコードの長さは、対応する入力コードの長さと一致する必要があります。しかし、コードを並べ替えて、必要なだけひっくり返して、オールコードのストランドを作ることができます。入力には常に少なくとも1本のコードが含まれます。
バイト単位の最短コードが優先されます。
テストケース
出力のあるケース:
[-->
{---]
>----{
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.
出力のないケース:
[-->
{---]
[-]
[-]
(-]
]->
}-)
>->
>-->
]---]
[-------------------]
]-------------------[
[-----------------]
[-----------------]
{--[
]--}