Bir gün kullanılmamış bilgisayar kabloları ve adaptörleri (USB - USB mini, VGA - DVI, vb.) Kutucuğunuzu kazdığınızı varsayalım. Her yerde karışıklık yaratan karışık kablolar var ve tüm kabloları tek bir uzun telin içine birleştirerek işleri basitleştirip birleştiremeyeceğinizi ve ardından sadece kabloları toplayıp toplayamayacağınızı merak ediyorsunuz.
Mesele şu ki, tüm kablolarınızı ve adaptörlerinizi bu kadar uzun bir hatta bağlamak mümkün mü? Açıkçası her zaman mümkün olmuyor, örneğin tamamen farklı fişe sahip sadece iki kabloya sahipseniz, birbirlerine bağlanamadılar. Ancak, her ikisine de bağlanabilecek üçüncü bir kablo varsa, tüm kablolarınızı birbirine bağlayabilirsiniz.
Tüm kordonun ucunda ne tür fişlerin bulunduğunu umursamıyorsunuz. Bir döngü oluşturmak için birbirlerine bağlanmaları gerekmez. Sadece tüm tel şeridi yapmanın mümkün olup olmadığını ve eğer öyleyse, nasıl yapılacağını bilmek istersiniz.
Meydan okuma
Her satırın sahip olduğunuz kablolardan birini gösterdiği çok satırlı bir dizgede geçen bir program veya işlev yazın. Bir kablo, -
her iki ucunda fiş bulunan bir veya daha fazla çizgiden ( ) oluşur. Bir fiş her zaman 8 karakterden biridir ()[]{}<>
.
Yani bunlar bazı geçerli kablolar:
>->
(--[
}-{
<-----]
(---)
Ancak bunlar değil:
-->
(--
)--
[{
---
Kabloları bağlarken, yalnızca aynı braket tipine sahip fişler birlikte bağlanabilir.
Yani bunlar bazı geçerli kablo bağlantıları:
...---((---...
...---))---...
...---]]---...
...---{{---...
...---<<---...
Ve bunlar geçersiz:
...---()---...
...---)(---...
...---{]---...
...---{[---...
...---><---...
...--->)---...
Girişteki tüm kablolar uzun bir iplikçikte yeniden düzenlenebilir ve eklenebilirse, o zaman bu ipliği bir sıradaki kıtlığa (isteğe bağlı izleyen bir yeni satır ile) çıkartın. Birden fazla çözüm olduğunda, bunlardan herhangi birini çıktı olarak seçebilirsiniz. Tek bir iplikçik yapmak mümkün değilse, o zaman hiçbir şey çıktı (veya isteğe bağlı izleyen bir yeni satır ile boş bir dize çıktı).
Örneğin, giriş
[-->
{---]
>----{
çıktı olabilir
[-->>----{{---]
tüm kabloların bir araya getirildiği yer.
Ancak giriş olsaydı
[-->
{---]
kablolar bağlanamaz, bu yüzden çıkış olmaz.
Bağlantıların yapılması için kabloların gerektiği kadar çevrilebileceğini unutmayın. örn. [-->
ve <--]
aynı kordlardır çünkü aynı tipte bağlantıları yapabilirler. Bazı çıkışlar giriş kablolarını çevirmeye bağlı olabilir.
Örneğin
(-[
}--]
çıktı olabilir
(-[[--{
ikinci kordonun çevrildiği yer veya
}--]]-)
ilk kordonun çevrildiği yer.
(Genel olarak tüm çıktının çevrilmesinin geçerli olduğunu unutmayın, çünkü başlangıçta her kordonun ayrı ayrı çevrilmesiyle aynıdır.)
Çıkıştaki kabloların uzunlukları elbette karşılık gelen giriş kablolarının uzunluklarıyla eşleşmelidir. Ancak tüm kabloyu yapmak için kablolar istediğiniz kadar yeniden sıralanabilir ve çevrilebilir. Giriş her zaman en az bir kablo içerecektir.
Bayt cinsinden en kısa kod kazanır.
Test Kılıfları
Çıkışlı durumlar:
[-->
{---]
>----{
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.
Çıktısız durumlar:
[-->
{---]
[-]
[-]
(-]
]->
}-)
>->
>-->
]---]
[-------------------]
]-------------------[
[-----------------]
[-----------------]
{--[
]--}