Angenommen, Sie stöbern eines Tages in Ihrer großen Kiste mit nicht verwendeten Computerkabeln und -adaptern (USB-zu-USB-Mini, VGA-zu-DVI usw.). Es gibt überall verwirrte Schnüre, die ein ziemliches Durcheinander verursachen, und Sie fragen sich, ob Sie die Dinge vereinfachen könnten, indem Sie alle Schnüre zu einer langen Litze zusammenfügen und sie dann einfach aufrollen.
Die Frage ist, ist es möglich, alle Ihre Kabel und Adapter in einer langen Reihe so zu verbinden? Es ist natürlich nicht immer möglich, zB wenn Sie nur zwei Kabel mit völlig unterschiedlichen Steckern hatten, konnten diese nicht miteinander verbunden werden. Aber wenn Sie ein drittes Kabel hätten, das an beide angeschlossen werden kann, könnten Sie alle Ihre Kabel aneinander reihen.
Es ist Ihnen egal, welche Art von Steckern sich an den Enden des Kabels befinden. Sie müssen sich nicht verbinden, um eine Schleife zu bilden. Sie möchten nur wissen, ob es möglich ist, eine reine Kordel herzustellen, und wenn ja, wie.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine mehrzeilige Zeichenfolge enthält, in der jede Zeile eines der Kabel darstellt, die Sie besitzen. Ein Kabel besteht aus einem oder mehreren Strichen ( -) mit einem Stecker an beiden Enden. Ein Plug ist immer eines der 8 Zeichen ()[]{}<>.
Das sind also einige gültige Kabel:
>->
(--[
}-{
<-----]
(---)
Das sind aber nicht:
-->
(--
)--
[{
---
Beim Anschließen von Kabeln können nur Stecker mit genau demselben Halterungstyp miteinander verbunden werden.
Das sind also einige gültige Kabelverbindungen:
...---((---...
...---))---...
...---]]---...
...---{{---...
...---<<---...
Und diese sind ungültig:
...---()---...
...---)(---...
...---{]---...
...---{[---...
...---><---...
...--->)---...
Wenn alle Kabel im Eingang neu angeordnet und in einem langen Strang verbunden werden können, geben Sie diesen Strang in einer Zeile auf Standardausgabe aus (mit einem optionalen nachgestellten Zeilenumbruch). Wenn es mehrere Lösungen gibt, können Sie eine davon für die Ausgabe auswählen. Wenn es nicht möglich ist, einen einzelnen Strang zu erstellen, geben Sie nichts aus (oder geben Sie eine leere Zeichenfolge mit einem optionalen abschließenden Zeilenumbruch aus).
Zum Beispiel, wenn die Eingabe ist
[-->
{---]
>----{
die Ausgabe könnte sein
[-->>----{{---]
wo alle Schnüre aneinandergereiht sind.
Allerdings wenn die Eingabe wäre
[-->
{---]
Die Kabel können nicht angeschlossen werden, sodass keine Ausgabe erfolgt.
Beachten Sie, dass die Kabel so oft umgedreht werden können, bis die Verbindungen hergestellt sind. ZB [-->und <--]sind effektiv das gleiche Kabel, weil sie die gleiche Art von Verbindungen herstellen können. Einige Ausgänge hängen möglicherweise vom Umdrehen der Eingangskabel ab.
Beispielsweise
(-[
}--]
hätte ausgeben können
(-[[--{
wo die zweite Schnur umgedreht ist, oder
}--]]-)
wo die erste Schnur umgedreht wird.
(Beachten Sie, dass im Allgemeinen das Spiegeln der gesamten Ausgabe gültig ist, da es das gleiche ist, als würde jedes Kabel einzeln gespiegelt.)
Die Länge der Kabel im Ausgang sollte natürlich mit der Länge der entsprechenden Eingangskabel übereinstimmen. Die Schnüre können jedoch so oft nachbestellt und gewendet werden, wie Sie möchten, um die reine Schnur zu erhalten. Der Eingang enthält immer mindestens ein Kabel.
Der kürzeste Code in Bytes gewinnt.
Testfälle
Fälle mit Ausgabe:
[-->
{---]
>----{
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.
Fälle ohne Ausgabe:
[-->
{---]
[-]
[-]
(-]
]->
}-)
>->
>-->
]---]
[-------------------]
]-------------------[
[-----------------]
[-----------------]
{--[
]--}
