Escriba un programa que tome una cadena o archivo de texto cuya primera línea tenga la forma
width height
y cada línea posterior tiene la forma
x y intensity red green blue
dónde:
width
yheight
puede ser cualquier número entero positivo.x
yy
puede ser cualquier número entero.intensity
puede ser cualquier número entero no negativo.red
,green
yblue
pueden ser enteros de 0 a 255 inclusive.
Su programa debe generar una imagen en color verdadero en cualquier formato de archivo de imagen sin pérdida común cuyas dimensiones sean width
de height
. Cada x y intensity red green blue
línea representa una estrella u orbe colorida que debe dibujarse en la imagen. Puede haber cualquier número de estrellas para dibujar, incluido 0. Puede suponer que la cadena o el archivo tiene una nueva línea final.
El algoritmo para dibujar la imagen es el siguiente, aunque puede implementarlo de la forma que desee siempre que el resultado sea idéntico:
Para cada píxel ( X , Y ) en la imagen (donde X es 0 en el borde izquierdo y ancho-1 en el borde derecho, e Y es 0 en el borde superior y altura-1 en el borde inferior), el canal de color C ϵ { rojo , verde , azul } (un valor fijado entre 0 y 255) viene dado por la ecuación:
Donde la función dist es la distancia euclidiana :
Elija la función de distancia que prefiera, en función de la capacidad de juego o la estética.
Cada una de las líneas en la entrada además de la primera es un elemento del conjunto de estrellas . Así, por ejemplo, S x representa el
x
valor en una de las líneas de entrada, y S C representa o bienred
,green
, oblue
, dependiendo de cual se calcula actualmente canal de color.
Ejemplos
Ejemplo A
Si la entrada es
400 150
-10 30 100 255 128 0
la salida debe ser
si está utilizando la distancia euclidiana, y
Si estás usando la distancia de Manhattan.
Ejemplo B
Si la entrada es
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
las salidas respectivas para la distancia euclidiana y de Manhattan deben ser
y .
Ejemplo C
Si la entrada es
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
la salida debe ser
si está utilizando la distancia euclidiana, y
Si estás usando la distancia de Manhattan.
Ejemplo D
Si la entrada es
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
la salida debe ser
si está utilizando la distancia euclidiana, y
Si estás usando la distancia de Manhattan.
Ejemplo E
Si la entrada es
100 1
entonces la salida debe ser una imagen de 100 píxeles de ancho por 1 píxel de alto que sea completamente negra.
Notas
- Tome la cadena de entrada o el nombre de un archivo de texto que lo contiene desde stdin o la línea de comando, o puede escribir una función que tome una cadena.
- "Mostrar" la imagen significa:
- Guardarlo en un archivo con el nombre de su elección.
- Imprimir los datos del archivo de imagen en bruto en stdout.
- Mostrar la imagen, como con PIL 's
image.show()
.
- No comprobaré que tus imágenes sean perfectas en píxeles (Stack Exchange comprime las imágenes de forma perdida de todos modos), pero sospecharé si puedo ver visualmente alguna diferencia.
- Puede usar bibliotecas de gráficos / imágenes.
Victorioso
La presentación más corta en bytes gana. En caso de empate, la primera presentación gana.
Bono divertido: dé la entrada para una imagen de salida realmente espectacular.