โปรแกรมเมอร์ทุกคนรู้ว่ารูปสี่เหลี่ยม□
สนุกจริงๆ เพื่อทำให้ความสนุกทวีความรุนแรงมากขึ้นแผนภาพที่น่ารักและคลุมเครือเหล่านี้สามารถเปลี่ยนเป็นกลุ่มของวงเล็บสาน
ความท้าทายนี้เป็นสิ่งที่ตรงกันข้ามของฉันก่อนหน้านี้
สมมติว่าคุณมีกลุ่มของรูปสี่เหลี่ยมผืนผ้าที่เชื่อมต่อกันดังนี้
+------------+
| |
+--+-+ +----+-+
| | | | | |
| | | +---+--+ | |
| | | | | | | |
+--+-+ | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
หมายเหตุเพิ่มเติม:
- จะไม่มีสองคน
+
ติดกันเลย - จะไม่มีรูปสี่เหลี่ยมผืนผ้าสองอันที่แบ่งปันขอบหรือมุม
- จะมีได้ไม่เกินหนึ่งแนวตั้งในแต่ละคอลัมน์
ขั้นตอนแรกคือดูที่ขอบซ้ายสุดของสี่เหลี่ยมใด ๆ ({[<
กำหนดให้หนึ่งในสี่ประเภทวงเล็บ [
ฉันเลือก
+------------+
| |
[--+-] +----+-+
[ | ] | | |
[ | ] +---+--+ | |
[ | ] | | | | |
[--+-] | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
ตอนนี้ดูที่สี่เหลี่ยมผืนผ้าซ้ายสุดที่สอง เนื่องจากมันซ้อนทับ[
สี่เหลี่ยมผืนผ้ามันจะต้องเป็นประเภทที่แตกต่างกัน (
ฉันเลือก
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] +---+--+ ) |
[ ( ] | | | ) |
[--(-] | +-+--+-)-+-+
( | | | | ) | |
( | | | | ) | |
( | | | | ) | | +-+
( +-+-+--+ ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
สี่เหลี่ยมที่อยู่ซ้ายสุดถัดไปจะไม่ตัดกับสี่เหลี่ยมที่ผ่านมา แต่จะซ้อนกันภายในสี่เหลี่ยมที่ผ่านมา ฉันเลือกที่จะมอบหมาย(
อีกครั้ง โดยปกติจะเป็นการดีที่จะกำหนดสี่เหลี่ยมประเภทเดียวกันกับสิ่งที่มันซ้อนอยู่ข้างในถ้าเป็นไปได้ แต่บางครั้งจำเป็นต้องมีการย้อนรอยกลับ
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( +-+--)-)-+-+
( ( | | ) ) | |
( ( | | ) ) | |
( ( | | ) ) | | +-+
( (-+-+--) ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
สี่เหลี่ยมถัดไปนี้สามารถกำหนดได้[
อีกครั้ง
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( [-+--)-)-+-]
( ( [ | ) ) | ]
( ( [ | ) ) | ]
( ( [ | ) ) | ] +-+
( (-[-+--) ) | ] | |
( [ | ) | ] +-+-+-+
(-----[-+----) | ] | | | |
[ | | ] | +-+ |
[ +------+ ] | |
[ ] | |
[----------] +-----+
สี่เหลี่ยมต่อไปนี้สนุกดี มันตัดกันทั้ง a (
และ[
สี่เหลี่ยมดังนั้นฉันจึงเรียกมันว่า{
สี่เหลี่ยม (หรือ<
แต่ไม่มีใครชอบอันนั้น)
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] +-+
( (-[-{--) ) } ] | |
( [ { ) } ] +-+-+-+
(-----[-{----) } ] | | | |
[ { } ] | +-+ |
[ {------} ] | |
[ ] | |
[----------] +-----+
รูปสี่เหลี่ยมผืนผ้าสองอันสุดท้ายนั้นไม่เลว พวกเขาสามารถเป็นสองประเภทที่แตกต่างกัน
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] {-}
( (-[-{--) ) } ] { }
( [ { ) } ] <-{-}->
(-----[-{----) } ] < { } >
[ { } ] < {-} >
[ {------} ] < >
[ ] < >
[----------] <----->
[(]([{))}]<{}>
การอ่านออกสี่เหลี่ยมที่ผมได้รับ นี่จะเป็นหนึ่งเอาต์พุตที่เป็นไปได้สำหรับอินพุตด้านบน นี่คือรายการของตัวเลือกที่เป็นไปได้มากมายไม่ใช่อย่างละเอียด:
[(]([{))}]<{}>
<(>(<{))}>{()}
{<}[{(]>)}[<>]
any of the 4! permutations of ([{<, you get the idea...
อินพุต
ASCII-art rectangles บนสมมติฐานที่ว่ามันไม่คลุมเครือ (ดูหมายเหตุด้านบน) และสามารถแปลงเป็นสตริงของวงเล็บปีกกาได้อย่างเหมาะสม คุณอาจสันนิษฐานว่าไม่มีช่องว่างต่อท้ายหรือเพิ่มเบาะสี่เหลี่ยมโดยมีบรรทัดใหม่ต่อท้ายที่เป็นตัวเลือก จะไม่มีช่องว่างชั้นนำ
เอาท์พุต
ใด ๆ ของสตริงวงเล็บเหลี่ยมที่ถูกต้องที่เป็นไปตามข้อ จำกัด ทางแยกของสี่เหลี่ยม นอกเหนือจากบรรทัดใหม่ที่เป็นทางเลือกไม่ควรมีอักขระอื่นนอกเหนือจากวงเล็บ กฎหลักคือถ้าสองสแควร์สตัดกันก็ควรกำหนดประเภทของวงเล็บต่าง ๆ
เป้าหมาย
นี่คือ code-golf, (ขาด) ปริมาณมากกว่าคุณภาพ
+
มุมที่ด้านบนซ้ายแล้ว (ด้านล่างทันที) +
สำหรับมุมด้านซ้ายล่างใช่ไหม