ความท้าทายนี้ประกอบด้วยการเข้ารหัสล่ามสำหรับภาษาคำอธิบายภาพวาดมอนเดรียน (MPDL)
นิยามภาษา
ภาษาดำเนินการกับกองสี่เหลี่ยม สี่เหลี่ยมถูกกำหนดโดยพิกัดด้านซ้ายบนและพิกัดล่างขวา พิกัดจะต้องเป็นจำนวนเต็ม สแต็กเริ่มต้นด้วยสี่เหลี่ยมเดียวที่มีคุณลักษณะ(1,1,254,254)
แต่ละคำสั่งมีรูปแบบต่อไปนี้:
<character><integer>
มีสามคำสั่ง:
v<integer>
: ดำเนินการแบ่งตามแนวตั้งบนสี่เหลี่ยมผืนผ้าล่าสุดในสแต็ก ณ ตำแหน่งที่ระบุโดยพารามิเตอร์ (เป็นเปอร์เซ็นต์) สี่เหลี่ยมต้นฉบับจะถูกลบออกจากสแต็กและแทนที่ด้วยสี่เหลี่ยมใหม่สองอันที่เป็นผลมาจากการแยก สี่เหลี่ยมด้านซ้ายถูกผลักลงบนสแต็กจากนั้นสี่เหลี่ยมด้านขวา เนื่องจากพิกัดสี่เหลี่ยมผืนผ้าเป็นจำนวนเต็มเศษส่วนควรถูกปัดเป็นจำนวนเต็มเล็กที่สุด
h<integer>
: แยกแนวนอน สี่เหลี่ยมผืนผ้าด้านบนถูกผลักลงบนสแต็กจากนั้นสี่เหลี่ยมผืนผ้าด้านล่าง
c<integer>
: ลบสี่เหลี่ยมล่าสุดออกจากสแต็กและวาดเป็นสีที่กำหนดเป็นพารามิเตอร์ 1 = ขาว, 2 = แดง, 3 = น้ำเงิน, 4 = เหลือง
ท้าทาย
เขียนโปรแกรมที่รับพารามิเตอร์เป็นคำอธิบายการทาสีและสร้างการแทนค่าบิตแมป 256x256 ของสี่เหลี่ยมที่ทาสี รูปสี่เหลี่ยมจะต้องคั่นด้วยเส้นสีดำ 3 พิกเซล สี่เหลี่ยมหนึ่งหรือสองพิกเซลควรมีพิกเซลที่ไม่ใช่สีดำซ่อนอยู่โดยพิกเซลสีดำเส้นขอบ
อินพุตสามารถอ่านเป็นพารามิเตอร์หรือเป็นไฟล์ขึ้นอยู่กับคุณ คำสั่งควรคั่นด้วยช่องว่าง คุณสามารถสันนิษฐานได้ว่าไฟล์อินพุตมีไวยากรณ์ที่ถูกต้องและไม่มีการเว้นวรรคหรือนำหน้าแท็บ ฯลฯ เอาต์พุตสามารถแสดงผลได้โดยตรงบนหน้าจอหรือบันทึกลงในไฟล์ตามที่คุณต้องการ
รหัสที่สั้นที่สุดชนะ
ทดสอบ
แหล่งที่มาต่อไปนี้:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
ควรผลิตComposition II เป็นสีแดงน้ำเงินและเหลือง :
v30 v50 c1 c5 h70 v50 c1 c3 c2
ดังนั้นข้างต้นสามารถแยกวิเคราะห์ยังคงเมื่อแสดงเป็น
v
และh
อาร์กิวเมนต์ควรเป็นพิกเซล