Напишіть програму, яка містить рядок або текстовий файл, перший рядок якого має форму
width height
і кожен наступний рядок має форму
x y intensity red green blue
де:
width
іheight
можуть бути будь-які додатні цілі числа.x
іy
можуть бути будь-які цілі числа.intensity
може бути будь-яке невід'ємне ціле число.red
,green
іblue
може бути будь-якими цілими числами від 0 до 255 включно.
Ваша програма повинна виводити зображення справжнього кольору у будь-якому загальному форматі файлу зображення без втрат, розміри якого є width
на height
. Кожна x y intensity red green blue
лінія являє собою барвисту зірку або кулю, яку треба намалювати на зображенні. Можна намалювати будь-яку кількість зірок, включаючи 0. Ви можете припустити, що рядок або файл має зворотний новий рядок.
Алгоритм нанесення зображення виглядає наступним чином, хоча ви можете його реалізувати будь-яким способом, який вам подобається, доки результат однаковий:
Для кожного пікселя ( X , Y ) на зображенні (де X дорівнює 0 в крайньому лівому краю, а ширина - 1 в нижньому правому краю, а Y - 0 у верхньому краї, а висота - 1 в нижньому краї), кольоровий канал C ϵ { червоний , зелений , синій } (значення, закріплене від 0 до 255) задається рівнянням:
Якщо функція dist - це евклідова відстань :
Або відстань на Манхеттені :
Вибирайте будь-яку функцію відстані, яку ви віддаєте перевагу, виходячи з гольфу та естетики.
Кожен з рядків на вході, крім першого, є елементом набору зірок . Так, наприклад, S х являє собою
x
значення на одній з вхідних ліній, а S C являє собою абоred
,green
абоblue
, в залежності від того, якого кольору канал в даний час розраховується.
Приклади
Приклад А
Якщо вхід є
400 150
-10 30 100 255 128 0
вихід повинен бути
якщо ви використовуєте евклідову відстань, і
якщо ви використовуєте Манхеттенську відстань.
Приклад В
Якщо вхід є
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
відповідні виходи для евклідової та манхеттенської відстані повинні бути
і .
Приклад С
Якщо вхід є
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
вихід повинен бути
якщо ви використовуєте евклідову відстань, і
якщо ви використовуєте Манхеттенську відстань.
Приклад Е
Якщо вхід є
100 1
тоді вихід повинен бути на 100 пікселів завширшки на 1 піксель у висоту, що є повністю чорним.
Примітки
- Візьміть вхідний рядок або ім'я текстового файлу, який містить його з stdin або командного рядка, або ви можете написати функцію, яка займає рядок.
- "Виведення" зображення означає або:
- Збережіть його у файл із вибраним вами іменем.
- Друк необроблених даних файлу зображень до stdout.
- Відображення зображення, наприклад, з PIL 's
image.show()
.
- Я не буду перевіряти, чи є ваші зображення ідеальними для пікселів (Stack Exchange все одно втрачає зображення), але буду дуже підозрілим, якщо зможу візуально визначити будь-яку різницю.
- Ви можете використовувати графіки / бібліотеки зображень.
Перемога
Виграє найкоротше подання в байтах. У разі зв'язань виграє найдавніше подання.
Веселий бонус: надайте вклад для дійсно вражаючого вихідного зображення.