เขียนโปรแกรมที่ใช้ในสตริงหรือไฟล์ข้อความที่บรรทัดแรกมีรูปแบบ
width height
และแต่ละบรรทัดถัดมามีแบบฟอร์ม
x y intensity red green blue
ที่อยู่:
width
และheight
อาจเป็นจำนวนเต็มบวกใด ๆx
และy
อาจเป็นจำนวนเต็มใด ๆintensity
อาจเป็นจำนวนเต็มใด ๆ ที่ไม่เป็นลบred
,green
และblue
อาจเป็นจำนวนเต็มตั้งแต่ 0 ถึง 255
โปรแกรมต้องส่งออกของคุณTrueColorภาพในรูปแบบใดที่พบบ่อย lossless ไฟล์ภาพที่มีขนาดโดยwidth
height
แต่ละx y intensity red green blue
บรรทัดแสดงถึงดาวหรือลูกโลกที่มีสีสันที่ต้องวาดลงบนภาพ อาจมีจำนวนดาวที่จะวาดรวมทั้ง 0 คุณอาจถือว่าสตริงหรือไฟล์มีการขึ้นบรรทัดใหม่
อัลกอริทึมสำหรับการวาดภาพมีดังต่อไปนี้แม้ว่าคุณจะสามารถนำไปใช้ในวิธีที่คุณต้องการตราบใดที่ผลลัพธ์เหมือนกัน:
สำหรับทุกพิกเซล ( X , Y ) ในภาพ (โดยที่Xคือ 0 ที่ขอบซ้ายสุดและความกว้าง -1ที่ขอบขวาสุดและYคือ 0 ที่ขอบด้านบนและความสูง -1ที่ขอบด้านล่าง) ช่องสีC ϵ { แดง , เขียว , น้ำเงิน } (ค่าที่ปักระหว่าง 0 ถึง 255) ได้รับจากสมการ:
โดยที่ฟังก์ชันdistเป็นระยะทางแบบยุคลิดอย่างใดอย่างหนึ่ง:
หรือระยะทางแมนฮัตตัน :
เลือกฟังก์ชั่นระยะทางที่คุณต้องการตามความสามารถในการเล่นกอล์ฟหรือความสวยงาม
แต่ละบรรทัดในอินพุตนอกเหนือจากแรกคือองค์ประกอบของชุดดาว ดังนั้นสำหรับตัวอย่าง, S xหมายถึง
x
ค่าหนึ่งของเส้นที่นำเข้าและ S Cหมายถึงอย่างใดอย่างหนึ่งred
,green
หรือblue
ขึ้นอยู่กับช่องสีในปัจจุบันคือการคำนวณ
ตัวอย่าง
ตัวอย่างก
หากอินพุตเป็น
400 150
-10 30 100 255 128 0
ผลลัพธ์ที่ควรจะเป็น
หากคุณใช้ระยะทางแบบยุคลิดและ
ถ้าคุณใช้ระยะทางแมนฮัตตัน
ตัวอย่าง B
หากอินพุตเป็น
200 200
100 100 10 255 255 255
20 20 40 255 0 0
180 20 40 255 255 0
180 180 40 0 255 0
20 180 40 0 0 255
เอาต์พุตที่เกี่ยวข้องสำหรับ Euclidean และระยะทางแมนฮัตตันควรเป็น
และ
ตัวอย่างค
หากอินพุตเป็น
400 400
123 231 10 206 119 85
358 316 27 170 47 99
95 317 3 202 42 78
251 269 17 142 150 153
43 120 3 145 75 61
109 376 6 230 231 52
331 78 21 31 81 126
150 330 21 8 142 23
69 155 11 142 251 199
218 335 7 183 248 241
204 237 13 112 253 34
342 89 18 140 11 123
ผลลัพธ์ที่ควรจะเป็น
หากคุณใช้ระยะทางแบบยุคลิดและ
ถ้าคุณใช้ระยะทางแมนฮัตตัน
ตัวอย่าง D
หากอินพุตเป็น
400 400
123 231 5 206 119 85
358 316 5 170 47 99
95 317 5 202 42 78
251 269 5 142 150 153
43 120 5 145 75 61
109 376 5 230 231 52
331 78 5 31 81 126
150 330 5 8 142 23
69 155 5 142 251 199
218 335 5 183 248 241
204 237 5 112 253 34
342 89 5 140 11 123
ผลลัพธ์ที่ควรจะเป็น
หากคุณใช้ระยะทางแบบยุคลิดและ
ถ้าคุณใช้ระยะทางแมนฮัตตัน
ตัวอย่าง E
หากอินพุตเป็น
100 1
ผลลัพธ์ควรเป็นภาพที่มีความกว้าง 100 พิกเซลสูง 1 พิกเซลซึ่งเป็นสีดำสนิท
หมายเหตุ
- ใช้สตริงที่ป้อนหรือชื่อของไฟล์ข้อความที่มีมันจาก stdin หรือบรรทัดคำสั่งหรือคุณอาจเขียนฟังก์ชั่นที่ใช้ในสตริง
- "กำลังแสดงผล" รูปภาพหมายถึง:
- บันทึกเป็นไฟล์ด้วยชื่อที่คุณต้องการ
- การพิมพ์ข้อมูลไฟล์ภาพดิบไปยัง stdout
- แสดงภาพเช่นกับPIL
image.show()
's
- ฉันจะไม่ตรวจสอบว่าภาพของคุณเป็นพิกเซลที่สมบูรณ์แบบ (การแลกเปลี่ยนแบบสแต็กบีบอัดรูปภาพอย่างสูญเปล่าอยู่แล้ว) แต่ฉันจะสงสัยมากถ้าฉันสามารถบอกความแตกต่างได้ด้วยสายตา
- คุณสามารถใช้ไลบรารีกราฟิก / รูปภาพ
การชนะ
การส่งที่สั้นที่สุดในหน่วยไบต์ชนะ ในกรณีของความสัมพันธ์การส่งที่เร็วที่สุดชนะ
โบนัสสนุก:ให้อินพุตสำหรับภาพเอาต์พุตที่น่าประทับใจอย่างแท้จริง