En este concurso, debe escribir un programa que acepte una imagen de píxeles en blanco y negro e intente alterarla, de modo que la forma blanca forme un dominio estelar , con el menor número de cambios posible.
Los cambios permitidos son convertir píxeles blancos en negros y convertir píxeles negros en blancos.
La salida debe consistir nuevamente en la misma imagen pero esta vez con todos los cambios y con / el centro marcado. Los píxeles que cambiaron de blanco a negro deben mostrarse en azul, los que cambiaron de negro a blanco deben mostrarse en amarillo, y al menos un píxel central debe mostrarse en rojo. (Los colores exactos dependen de usted). El programa debe superar la imagen especificada, así como la cantidad total de cambios realizados.
Definiciones
Dominio estrella
El conjunto de píxeles blancos de la imagen representa un dominio estelar si (y solo si) hay (al menos) un píxel central . El píxel central es uno de los píxeles blancos que se puede conectar mediante una línea recta a todos los demás píxeles blancos, de modo que la línea solo atraviesa píxeles blancos. (Por lo tanto, el píxel central no es necesariamente único).
Línea recta entre dos píxeles
Dados dos píxeles (inicio y final, ambos rojos en la ilustración a continuación), la línea recta entre los dos píxeles consiste en todos los píxeles, que tocan la línea (matemática, amarilla en la ilustración a continuación) que conduce desde el centro de la primera píxel al centro del último píxel. Un píxel no toca la línea si solo lo toca por una esquina, por lo que para que un píxel pertenezca a la línea de píxeles, la línea (matemática, amarilla) tiene que cruzar el píxel en cuestión con una longitud distinta de cero. (Si solo toca el punto de la esquina, esto se considera como longitud cero). Considere los siguientes ejemplos:
Ejemplo
La primera imagen debe representar un ejemplo de 'entrada' de caso de prueba y las otras dos imágenes representan dos posibles salidas válidas para el ejemplo dado:
Las áreas amarillas (anteriormente negras) también cuentan para el dominio 'blanco', mientras que las áreas azules (anteriormente blancas) cuentan para la parte 'negra' fuera del dominio, y el punto rojo representa cada vez un píxel central posible.
Casos de prueba
Los siguientes casos de prueba son png con un tamaño de 256 x 256 píxeles.
Puntuación
Ejecute su programa con los siguientes casos de prueba e incluya el resultado (imagen / número de cambios) en su respuesta. Haré una tabla de clasificación para cada caso de prueba. Su puntaje será la suma de cada clasificación en la tabla de clasificación: cuanto menor sea el puntaje, mejor. Se aplican lagunas estándar. No está permitido hacer que el programa reconozca esos casos de prueba y ejecute un caso especial para ellos. (No está permitido calcular previamente y guardar los píxeles centrales óptimos para cada uno de esos casos de prueba). El programa debería funcionar para cualquier imagen.
Tabla de clasificación
Name | Score | 1 - rk | 2 - rk | 3 - rk | 4 - rk | 5 - rk | 5 - rk | Total Changes
------------+-------+------------+------------+------------+------------+------------+------------+--------------
Maltysen | 11 | 28688 - 2 | 24208 - 2 | 24248 - 1 | 7103 - 2 | 11097 - 2 | 13019 - 2 | 108363
TheBestOne | 7 | 0 - 1 | 13698 - 1 | 24269 - 2 | 103 - 1 | 5344 - 1 | 4456 - 1 | 47867
Respuestas:
Java 8, 47.867 cambios en total.
Utiliza el promedio de la imagen como punto central. Luego dibuja todos los rayos posibles hacia el centro y le da el mejor radio para colorear. Luego colorea todos los puntos no válidos en negro.
Resultados
Imagen 1 - 0 cambios, Imagen 2 - 13,698 cambios
Imagen 3 - 24,269 cambios, Imagen 4 - 103 cambios
Imagen 5 - 5,344 cambios, Imagen 6 - 4,456 cambios
Sin píxeles inválidos eliminados, 42,782 cambios en total
Los píxeles verdes son la primera capa de píxeles no válidos.
Imagen 1 - 0 cambios, Imagen 2- 9,889 cambios
Imagen 3 - 24,268 cambios, Imagen 4 - 103 cambios
Imagen 5 - 4,471 cambios, Imagen 6- 4,050 cambios
Todos los píxeles blancos en todas las imágenes pueden tener una línea dibujada desde el píxel central si la línea no tiene que originarse / terminar en los centros sino en cualquier parte del píxel.
args[0]
contiene el nombre del archivo de entrada.args[1]
contiene el nombre del archivo de salida.Imprime al
stdout
número de cambios.fuente
Python - PIL -
216,228108,363 cambios en totalWhoo! ¡Córtalo a la mitad gracias a @AJMansfield! Este algoritmo omite todas las preocupaciones con el cálculo de líneas y la optimización y lo que no.
Simplemente cambia todos los blancos a negro excepto uno. Si no hay blancos, uno se vuelve negro y blanco.Comprueba si hay más blancos o negros y cambia cada uno del otro tipo a excepción de uno. Si no hay negro, hace (0, 0) el centro.Resultados
Imagen 1 - 28688 cambios, Imagen 2 - 24208 cambios
Imagen 3 - 24248 cambios, Imagen 4 - 7103 cambios
Imagen 5 - 11097 cambios, Imagen 6 - 13019 cambios
Toma el nombre del archivo de raw_input y escribe en out.png e imprime el número de cambios.
fuente