ในความท้าทายนี้เราสร้างส่วนต่อประสานผู้ใช้ Ascii
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
การวาดภาพแต่ละแบบนี้ทำจากองค์ประกอบหนึ่งซึ่งสามารถมีองค์ประกอบย่อยได้ องค์ประกอบที่เป็นไปได้มีการระบุไว้ด้านล่าง:
- องค์ประกอบข้อความ มีข้อความอย่างน้อยหนึ่งบรรทัด
- องค์ประกอบกล่อง มีหนึ่งองค์ประกอบย่อยที่ล้อมรอบด้วยเส้นขอบ เส้นขอบมี
+
s ที่มุมและ-
s และ|
ที่ขอบ - รายการแนวนอน มีองค์ประกอบหนึ่งรายการขึ้นไปที่จัดเรียงในแนวนอน
- รายการแนวตั้ง มีองค์ประกอบหนึ่งรายการขึ้นไปที่จัดเรียงชิดกันในแนวตั้งและไปทางซ้ายในแนวนอน
ทุกองค์ประกอบเป็นรูปสี่เหลี่ยมผืนผ้า
แต่ละองค์ประกอบนอกเหนือไปจากเนื้อหาที่มีคุณสมบัติที่เรียกว่าพื้นฐาน พื้นฐานจะใช้ในการจัดตำแหน่งองค์ประกอบในแนวตั้ง: ทุกองค์ประกอบของรายการแนวนอนจะถูกจัดตำแหน่งเช่นนั้นเส้นเขตแดนของพวกเขาจะอยู่ในบรรทัดเดียวกัน aeg
ในตัวอย่างด้านล่างพื้นฐานประกอบด้วยอักขระ เส้นเขตแดนของทั้งสามองค์ประกอบกล่องมี (0-จัดทำดัชนี) 1
, และ3
2
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
เส้นเขตแดนจะถูกกำหนดด้วยกฎต่อไปนี้:
- สำหรับองค์ประกอบข้อความบรรทัดแรกของข้อความคือพื้นฐานเช่น
0
. - สำหรับองค์ประกอบกล่องพื้นฐานคือ 1 + พื้นฐานขององค์ประกอบย่อย
- สำหรับรายการแนวนอนพื้นฐานคือพื้นฐานสูงสุดในรายการ (
3
ในตัวอย่างด้านบน) - สำหรับรายการแนวตั้งพื้นฐานคือพื้นฐานขององค์ประกอบซึ่งจะต้องระบุไว้ในอินพุต
อินพุต
อินพุตเป็นข้อกำหนดของอินเทอร์เฟซในบางรูปแบบ (เช่นรายการ, json) ตัวอย่างอินพุตมีรูปแบบต่อไปนี้:
- องค์ประกอบสตริงคือสตริง:
"..."
- องค์ประกอบกล่องเป็นรายการที่องค์ประกอบแรกคือ
"b"
:["b", subelement]
- รายการแนวนอนเป็นรายการที่องค์ประกอบแรกคือ
"h"
:["h", items...]
- รายการแนวตั้งเป็นรายการที่องค์ประกอบแรกคือ
"v"
และองค์ประกอบที่สองคือหมายเลข (0 ดัชนี) ขององค์ประกอบที่ใช้พื้นฐานพื้นฐาน:["v", n, items...]
เอาท์พุต
ผลลัพธ์จะต้องมีองค์ประกอบที่สอดคล้องโดยใช้กฎที่ฉันระบุไว้ข้างต้น เอาต์พุตสามารถเป็น stdout, รายการของสตริงหรือสิ่งอื่นที่มีความหมาย
เกณฑ์การให้คะแนน
นี่คือรหัสกอล์ฟซึ่งเป็นกฎปกติที่บังคับใช้
กรณีทดสอบ
1
["b", ["v", 0, ["h", ["b", "<- Previous"], ["b", "Next ->"]], "== The title ==\n\nLorem ipsum dolor\nsit amet...", ["b", "Post a comment"], ["b", "User X commented:\n\nThis is amazing!"], ["b", "User Y commented:\n\nlol"]]]
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
2
["h", ["b", ["v", 0, "a", "b"]], ["b", ["v", 2, "c", "d", "e"]], ["b", ["v", 1, "f", "g", "h"]]]
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
3
["h", ["b", ["v", 0, ["b", ["h", "a\nb", "c"]], "d", "e", ["h", ["h", "f"], ["b", ["h", "g"]], "h"]]], ["b", "ijk\nl\nmn\no"], ["v", 2, ["b", "pqrst"], ["b", "uv\nw"], ["b", "x"]], ["b", ["b", ["b", "yz"]]]]
+-----+
|pqrst|
+-----+
+--+
|uv|
|w | +------+
+-----+ +--+ |+----+|
|+--+ |+---++-+ ||+--+||
||ac| ||ijk||x| |||yz|||
||b | ||l |+-+ ||+--+||
|+--+ ||mn | |+----+|
|d ||o | +------+
|e |+---+
| +-+ |
|f|g|h|
| +-+ |
+-----+
4
["h", "a * b = ", ["v", 0, "a + a + ... + a", "\\_____________/", " b times"]]
a * b = a + a + ... + a
\_____________/
b times
a
อยู่ในบรรทัดเดียวกันขณะe
ที่ทั้งคู่อยู่ที่พื้นฐานของกล่อง ฉันไม่แน่ใจว่า "baseline" เป็นคำที่ถูกต้องสำหรับเรื่องนี้หรือไม่ฉันรู้เพียงว่ามันถูกใช้ในด้านการพิมพ์เพื่อจุดประสงค์ที่คล้ายกัน