สมมติว่าวันหนึ่งคุณขุดผ่านสายคอมพิวเตอร์และอะแดปเตอร์ขนาดใหญ่ที่ไม่ได้ใช้ (USB เป็น USB mini, VGA กับ DVI, ฯลฯ ) มีสายพันกันทุกที่ทำให้เกิดความยุ่งเหยิงและคุณสงสัยว่าคุณสามารถทำให้สิ่งต่าง ๆ ง่ายขึ้นหรือไม่โดยการรวมสายทั้งหมดเข้าด้วยกันในสายยาวเส้นเดียวแล้วก็กลิ้งมันขึ้นมา
คำถามคือมันเป็นไปได้ไหมที่จะเชื่อมต่อสายไฟและอะแดปเตอร์ทั้งหมดของคุณในสายยาว ๆ แบบนี้? เห็นได้ชัดว่ามันเป็นไปไม่ได้เสมอไปเช่นหากคุณมีสายไฟสองเส้นที่มีปลั๊กที่แตกต่างกันโดยสิ้นเชิง แต่ถ้าคุณมีสายที่สามที่สามารถเชื่อมต่อกับทั้งสองสายได้คุณสามารถร้อยสายทั้งหมดเข้าด้วยกัน
คุณไม่สนใจว่าปลั๊กชนิดใดที่อยู่บนปลายของสายไฟทั้งหมด พวกเขาไม่จำเป็นต้องเสียบเข้าด้วยกันเพื่อสร้างวง คุณแค่อยากรู้ว่าการทำสายไฟทั้งหมดนั้นเป็นไปได้หรือไม่และถ้าเป็นเช่นนั้นจะทำอย่างไร
ท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในสตริงหลายบรรทัดโดยที่ทุกบรรทัดแสดงหนึ่งในสายที่คุณเป็นเจ้าของ สายไฟประกอบด้วยเส้นประอย่างน้อยหนึ่งเส้น ( -
) พร้อมปลั๊กที่ปลายทั้งสองด้าน ปลั๊กเป็นหนึ่งใน 8 ตัวอักษร()[]{}<>
เสมอ
ดังนั้นนี่คือบางส่วนสายที่ถูกต้อง:
>->
(--[
}-{
<-----]
(---)
แต่นี่ไม่ใช่:
-->
(--
)--
[{
---
เมื่อเชื่อมต่อสายเชื่อมต่อเท่านั้นที่สามารถใช้ตัวยึดประเภทเดียวกันได้
ดังนั้นนี่คือการเชื่อมต่อสายไฟที่ถูกต้อง:
...---((---...
...---))---...
...---]]---...
...---{{---...
...---<<---...
และสิ่งเหล่านี้ไม่ถูกต้อง:
...---()---...
...---)(---...
...---{]---...
...---{[---...
...---><---...
...--->)---...
หากสายทั้งหมดในอินพุตสามารถจัดเรียงใหม่และเชื่อมต่อเข้าด้วยกันในหนึ่งสายยาวจากนั้นเอาท์พุทที่ strand ไปยัง 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.
กรณีที่ไม่มีเอาท์พุท:
[-->
{---]
[-]
[-]
(-]
]->
}-)
>->
>-->
]---]
[-------------------]
]-------------------[
[-----------------]
[-----------------]
{--[
]--}