งานนี้เป็นส่วนหนึ่งของครั้งแรกงวดพรีเมียร์โปรแกรมปริศนากด
คุณได้รับลำดับชั้นของรายการในรูปแบบต่อไปนี้:
2
Hat
1
Gloves
ซึ่งจะต้องใส่ในกล่องเช่น:
.------------.
| Hat |
| .--------. |
| | Gloves | |
| '--------' |
'------------'
ในรูปแบบการป้อนข้อมูลตัวเลขเริ่มต้นกล่องที่มีรายการให้มากที่สุดเท่าที่จำนวนที่ระบุ กล่องแรกมีสองรายการอยู่ในนั้น (หมวกและกล่องที่มีถุงมือ) ส่วนที่สองมีเพียงรายการเดียวเท่านั้น - ถุงมือ
อย่างที่เห็นกล่องสามารถอยู่ในกล่องได้เช่นกัน และพวกมันจะถูกปัดเศษเสมอ ... เรียงลำดับของ (มุมแหลมเป็นอันตรายจากบาดแผลและเราไม่ต้องการมัน)
ด้านล่างนี้มีรายละเอียดที่น่ารังเกียจสำหรับผู้ที่ต้องการใช้ประโยชน์จากทุก ๆ ส่วนที่ข้อกำหนดให้ ใจคุณการไม่อ่านสเป็คนั้นเป็นข้อแก้ตัวสำหรับการส่งคำตอบที่ผิด ในตอนท้ายจะมีสคริปต์ทดสอบและกรณีทดสอบบางกรณี
สเปค
กล่องถูกสร้างขึ้นจากตัวละครต่อไปนี้:
|
(U + 007C) ใช้สำหรับสร้างขอบแนวตั้ง-
(U + 002D) ใช้เพื่อสร้างขอบแนวนอน'
(U + 0027) คือมุมล่างของวงกลม.
(U + 002E) คือมุมบนของวงกลม
กล่องมีลักษณะดังนี้:
.--. | | '--'
โปรดทราบว่าในขณะที่ Unicode นั้นมีมุมโค้งมนและอักขระวาดรูปกล่องที่เหมาะสมงานนี้เป็นแบบ ASCII เท่านั้น เท่าที่ฉันรัก Unicode ฉันรู้ว่ามีภาษาและสภาพแวดล้อมที่นั่นซึ่งไม่ค่อยประสบความสำเร็จในช่วงทศวรรษที่สองถึงทศวรรษที่ผ่านมา
กล่องสามารถมีลำดับของรายการที่เป็นข้อความหรือรายการอื่น ๆ แต่ละรายการในกล่องจะแสดงผลจากบนลงล่าง ลำดับ A, B, C จึงแสดงผลดังนี้:
.---. | A | | B | | C | '---'
แน่นอนนี้ใช้กับกล่องซ้อนกันเช่นกันซึ่งเป็นรายการที่เหมือนกับข้อความ ดังนั้นลำดับ A, B, Box (C, Box (D, E)), F จะแสดงผลดังนี้:
.-----------. | A | | B | | .-------. | | | C | | | | .---. | | | | | D | | | | | | E | | | | | '---' | | | '-------' | | F | '-----------'
กล่องปรับขนาดให้เข้ากับเนื้อหาและกล่องที่ซ้อนกันจะขยายตามขนาดของพาเรนต์เสมอ มีช่องว่างทั้งก่อนและหลังเนื้อหาเสมอเพื่อไม่ให้ข้อความหรือกล่องซ้อนกันอยู่ใกล้กับขอบกล่องด้านนอกมากเกินไป กล่าวโดยย่อสิ่งต่อไปนี้ผิด
.---. |Box| '---'
และต่อไปนี้ถูกต้อง:
.-----. | Box | '-----'
ดูดีกว่าด้วย :-)
รายการข้อความ (ดูอินพุตด้านล่าง) จะต้องทำซ้ำอย่างแน่นอน
มีกล่องระดับบนสุดเสมอ (เปรียบเทียบ XML) อย่างไรก็ตามหนึ่งกล่องสามารถมีอีกหลายกล่อง
อินพุต
อินพุตได้รับจากอินพุตมาตรฐาน สำหรับการทดสอบที่เปลี่ยนเส้นทางได้ง่ายขึ้นจากไฟล์
อินพุตจะได้รับ Line-wise โดยแต่ละบรรทัดจะแทนรายการข้อความที่จะใส่ในกล่องปัจจุบันหรือเปิดกล่องใหม่
ทุกบรรทัดถูกยกเลิกโดยตัวแบ่งบรรทัด
รายการข้อความมีการทำเครื่องหมายโดยบรรทัดที่ไม่มีตัวเลข (ดูด้านล่าง) ข้อความใช้อักขระตัวอักษรช่องว่างและเครื่องหมายวรรคตอน (
.,-'"?!()
) ข้อความจะไม่เริ่มต้นหรือลงท้ายด้วยเว้นวรรคและจะมีอักขระอย่างน้อยหนึ่งตัวเสมอกล่องเริ่มต้นด้วยบรรทัดเดียวที่มีตัวเลขอยู่ในนั้น จำนวนที่บอกขนาดของกล่องคือจำนวนรายการต่อไปนี้ที่ใส่ลงไป:
2 A B
ให้กล่องที่มีรายการข้อความสองรายการ:
.---. | A | | B | '---'
กล่องจะมีอย่างน้อยหนึ่งรายการ
จุดสิ้นสุดของกล่องไม่ได้ทำเครื่องหมายอย่างชัดเจนด้วยเส้น แทนที่จะปิดกล่องโดยปริยายหลังจากใส่จำนวนรายการตามที่ระบุไว้
กล่องเป็นเพียงรายการเดียวเสมอไม่ว่าจะมีกี่รายการก็ตาม เช่น
3 A 4 a b c d B
จะให้กล่องที่มีสามรายการที่สองเป็นอีกกล่องที่มีสี่รายการ
การทำรังไม่ส่งผลกระทบต่อความจริงที่ว่ากล่องเป็นเพียงรายการเดียว
ขีด จำกัด
ระดับการทำรังสูงสุดคือห้า นั่นคือมีมากที่สุดห้ากล่องในแต่ละอื่น ๆ ซึ่งรวมถึงส่วนนอกสุด
มีมากถึงสิบรายการต่อกล่อง
รายการข้อความมีความยาวสูงสุด100อักขระ
เอาท์พุต
- เอาท์พุทเป็นกล่องแสดงผลรวมถึงรายการที่มีและซ้อนอยู่ทั้งหมดตามกฎที่ระบุไว้ข้างต้น
- ควรให้เอาต์พุตกับเอาต์พุตมาตรฐานและจะต้องตรงกันทั้งหมด ไม่อนุญาตให้นำช่องว่างนำหน้าหรือต่อท้าย
- แต่ละบรรทัดต้องถูกยกเลิกด้วยการขึ้นบรรทัดใหม่รวมถึงบรรทัดสุดท้าย
สภาพการชนะ
- รหัสที่สั้นที่สุดชนะ (เช่นได้รับคำตอบที่ยอมรับ)
ตัวอย่างอินพุต 1
3
This is some text!
Oh, more text?
Just text for now, as this is a trivial example.
ตัวอย่างผลลัพธ์ 1
.--------------------------------------------------.
| This is some text! |
| Oh, more text? |
| Just text for now, as this is a trivial example. |
'--------------------------------------------------'
ตัวอย่างอินพุต 2
4
Extreme
nesting
3
of
boxes
4
might
lead
to
2
interesting
1
visuals.
Indeed!
ตัวอย่างผลลัพธ์ 2
.--------------------------.
| Extreme |
| nesting |
| .----------------------. |
| | of | |
| | boxes | |
| | .------------------. | |
| | | might | | |
| | | lead | | |
| | | to | | |
| | | .--------------. | | |
| | | | interesting | | | |
| | | | .----------. | | | |
| | | | | visuals. | | | | |
| | | | '----------' | | | |
| | | '--------------' | | |
| | '------------------' | |
| '----------------------' |
| Indeed! |
'--------------------------'
ตัวอย่างอินพุต 3
1
1
1
1
1
Extreme nesting Part Two
ตัวอย่างผลลัพธ์ 3
.------------------------------------------.
| .--------------------------------------. |
| | .----------------------------------. | |
| | | .------------------------------. | | |
| | | | .--------------------------. | | | |
| | | | | Extreme nesting Part Two | | | | |
| | | | '--------------------------' | | | |
| | | '------------------------------' | | |
| | '----------------------------------' | |
| '--------------------------------------' |
'------------------------------------------'
ตัวอย่างอินพุต 4
3
Foo
2
Bar
Baz
2
Gak
1
Another foo?
ตัวอย่างผลลัพธ์ 4
.----------------------.
| Foo |
| .------------------. |
| | Bar | |
| | Baz | |
| '------------------' |
| .------------------. |
| | Gak | |
| | .--------------. | |
| | | Another foo? | | |
| | '--------------' | |
| '------------------' |
'----------------------'
สคริปต์ทดสอบ
เนื่องจากการรับรายละเอียดที่ถูกต้องอาจเป็นเรื่องยากในบางครั้งที่เรา ( Venteroและฉัน) ได้เตรียมสคริปต์ทดสอบคุณสามารถเรียกใช้โซลูชันของคุณด้วยเพื่อตรวจสอบว่าถูกต้องหรือไม่ มันมีอยู่เป็นทั้งPowerShell สคริปต์และสคริปต์ทุบตี การขอร้องคือ: <test-script> <program invocation>
.
UPDATE: สคริปต์ทดสอบได้รับการอัปเดตแล้ว มีหลายกรณีทดสอบที่ไม่เป็นไปตามขีด จำกัด ที่ฉันกำหนดไว้ สคริปต์ทดสอบ PowerShell ไม่ได้ใช้การเปรียบเทียบแบบตัวพิมพ์เล็ก - ใหญ่สำหรับการตรวจสอบผลลัพธ์ ฉันหวังว่าทุกอย่างเรียบร้อยดี จำนวนกรณีทดสอบลดลงเหลือ 156 แม้ว่ากรณีสุดท้ายจะค่อนข้างใหญ่ ...
UPDATE 2: ฉันฉันอัปโหลดกำเนิดทดสอบกรณี เขียนใน C #โดยกำหนดเป้าหมายเป็นรันไทม์. NET 2 มันวิ่งบนโมโน มันอาจช่วยให้ผู้คนทดสอบการใช้งานของพวกเขา เป็นกรณีที่เลวร้ายที่สุดที่ชัดเจนได้รับข้อ จำกัด ในงานที่คุณสามารถลอง:
nb.exe 1 10 10 5 100 100 | my invocation
ซึ่งจะสร้างเฉพาะกล่องจนถึงระดับสุดในและใช้ทั้งจำนวนสูงสุดของรายการต่อกล่องและความยาวสูงสุดของรายการข้อความ ฉันไม่ได้รวมกรณีทดสอบนี้ไว้ในสคริปต์ทดสอบเนื่องจากมีขนาดค่อนข้างใหญ่และมีขนาดใหญ่กว่า
อัปเดต3: ฉันอัปเดตสคริปต์ทดสอบ PowerShell ซึ่งมีแนวโน้มที่จะเกิดข้อผิดพลาดขึ้นอยู่กับว่าจุดสิ้นสุดของบรรทัดอยู่ในสคริปต์และบรรทัดใดที่ลงท้ายด้วยโซลูชันที่พิมพ์ ตอนนี้มันควรจะเป็นทั้งผู้ไม่เชื่อเรื่องพระเจ้า ขออภัยในความสับสนอีกครั้ง