Viết chương trình lấy chuỗi hoặc tệp văn bản có dòng đầu tiên có dạng
width height
và mỗi dòng tiếp theo có dạng
x y intensity red green blue
Ở đâu:
width
vàheight
có thể là bất kỳ số nguyên dương nào.x
vày
có thể là bất kỳ số nguyên nào.intensity
có thể là bất kỳ số nguyên không âm.red
,green
vàblue
có thể là bất kỳ số nguyên nào từ 0 đến 255.
Chương trình của bạn phải xuất hình ảnh truecolor theo bất kỳ định dạng tệp hình ảnh lossless phổ biến nào có kích thước width
bằng height
. Mỗi x y intensity red green blue
dòng đại diện cho một ngôi sao hoặc quả cầu đầy màu sắc phải được vẽ trên hình ảnh. Có thể có bất kỳ số sao nào để vẽ, bao gồm 0. Bạn có thể giả sử chuỗi hoặc tệp có dòng mới.
Thuật toán để vẽ hình ảnh như sau, mặc dù bạn có thể thực hiện nó theo bất kỳ cách nào bạn muốn miễn là kết quả giống hệt nhau:
Với mỗi pixel ( X , Y ) trong ảnh (trong đó X là 0 ở cạnh ngoài cùng bên trái và chiều rộng-1 ở cạnh ngoài cùng bên phải và Y là 0 ở cạnh trên và chiều cao-1 ở cạnh dưới), kênh màu C ϵ { đỏ , lục , lam } (một giá trị được ghim từ 0 đến 255) được đưa ra theo phương trình:
Trong đó hàm dist là khoảng cách Euclide :
Hoặc khoảng cách Manhattan :
Chọn bất kỳ chức năng khoảng cách nào bạn thích, dựa trên khả năng chơi gôn hoặc thẩm mỹ.
Mỗi dòng trong đầu vào bên cạnh đầu tiên là một phần tử của tập hợp Stars . Vì vậy, ví dụ, S x đại diện cho
x
giá trị trên một trong những dòng đầu vào, và S C đại diện cho một trong haired
,green
hoặcblue
, tùy thuộc vào kênh màu hiện đang được tính toán.
Ví dụ
Ví dụ A
Nếu đầu vào là
400 150
-10 30 100 255 128 0
đầu ra phải là
nếu bạn đang sử dụng khoảng cách Euclide và
nếu bạn đang sử dụng khoảng cách Manhattan.
Ví dụ B
Nếu đầu vào là
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
các đầu ra tương ứng cho khoảng cách Euclide và Manhattan phải là
và .
Ví dụ C
Nếu đầu vào là
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
đầu ra phải là
nếu bạn đang sử dụng khoảng cách Euclide và
nếu bạn đang sử dụng khoảng cách Manhattan.
Ví dụ D
Nếu đầu vào là
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
đầu ra phải là
nếu bạn đang sử dụng khoảng cách Euclide và
nếu bạn đang sử dụng khoảng cách Manhattan.
Ví dụ E
Nếu đầu vào là
100 1
thì đầu ra phải là một hình ảnh rộng 100 pixel, cao 1 pixel, hoàn toàn màu đen.
Ghi chú
- Lấy chuỗi đầu vào hoặc tên của tệp văn bản chứa nó từ stdin hoặc dòng lệnh hoặc bạn có thể viết một hàm có trong một chuỗi.
- "Xuất" hình ảnh có nghĩa là:
- Lưu nó vào một tập tin với tên của sự lựa chọn của bạn.
- In dữ liệu tệp hình ảnh thô sang thiết bị xuất chuẩn.
- Hiển thị hình ảnh, chẳng hạn như với PIL 's
image.show()
.
- Tôi sẽ không kiểm tra xem hình ảnh của bạn có hoàn hảo về pixel hay không (Stack Exchange sẽ nén hình ảnh một cách dễ dàng) nhưng tôi sẽ rất nghi ngờ nếu tôi có thể thấy bất kỳ sự khác biệt nào.
- Bạn có thể sử dụng các thư viện đồ họa / hình ảnh.
Chiến thắng
Đệ trình ngắn nhất tính bằng byte thắng. Trong trường hợp quan hệ, trình sớm nhất sẽ thắng.
Phần thưởng thú vị: Cung cấp đầu vào cho hình ảnh đầu ra thực sự ngoạn mục.