Dans ce concours, vous devez écrire un programme qui accepte une image en pixels noir et blanc et essaie de la modifier, de sorte que la forme blanche forme le domaine étoile , avec le moins de changements possible.
Les modifications autorisées sont de transformer les pixels blancs en noirs et de transformer les pixels noirs en blancs.
La sortie doit à nouveau être constituée de la même image mais cette fois avec tous les changements et avec un / le centre marqué. Les pixels qui sont passés du blanc au noir doivent être affichés en bleu, ceux qui sont passés du noir au blanc doivent être affichés en jaune et au moins un pixel central doit être affiché en rouge. (Les couleurs exactes dépendent de vous.) Le programme doit sortir l'image spécifiée ainsi que le nombre total de modifications qui ont été apportées.
Définitions
Domaine étoile
L'ensemble des pixels blancs de l'image représente un domaine d'étoile si (et seulement si) il y a (au moins) un pixel central . Le pixel central est l'un des pixels blancs qui peuvent être connectés par une ligne droite à tous les autres pixels blancs de sorte que la ligne ne traverse que des pixels blancs. (Le pixel central n'est donc pas nécessairement unique.)
Ligne droite entre deux pixels
Étant donné deux pixels (début et fin, tous deux rouges dans l'illustration ci-dessous), la ligne droite entre les deux pixels se compose de tous les pixels qui touchent la ligne (mathématique, jaune dans l'illustration ci-dessous) qui part du centre du premier pixel au centre du dernier pixel. Un pixel ne touche pas la ligne s'il ne la touche que par un coin, donc pour qu'un pixel appartienne à la ligne de pixel, la ligne (mathématique, jaune) doit traverser le pixel en question avec une longueur non nulle. (S'il ne touche que le point d'angle, cela est considéré comme une longueur nulle). Considérez les exemples suivants:
Exemple
La première image doit représenter un exemple d'entrée de testcase et les deux autres images représentent deux sorties possibles valides pour l'exemple donné:
Les zones jaunes (anciennement noires) comptent également dans le domaine `` blanc '', tandis que les zones bleues (anciennement blanches) comptent dans la partie `` noire '' à l'extérieur du domaine, et le point rouge à chaque fois représente un pixel central possible.
Cas de test
Les cas de test suivants sont des png avec chacun une taille de 256 x 256 pixels.
Notation
Veuillez exécuter votre programme avec les cas de test suivants et inclure la sortie (image / nombre de modifications) dans votre réponse. Je ferai un classement pour chaque cas de test. Votre score sera la somme de chaque classement dans le classement - plus le score est bas, mieux c'est. Des échappatoires standard s'appliquent. Il n'est pas autorisé de faire reconnaître au programme ces cas de test et d'exécuter un cas spécial pour eux. (Il n'est pas autorisé de précalculer et d'enregistrer les pixels centraux optimaux pour chacun de ces cas de test.) Le programme devrait fonctionner pour toutes les images.
Classement
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
Réponses:
Java 8, 47 867 changements au total.
Utilise la moyenne de l'image comme point central. Il attire ensuite tous les rayons possibles vers le centre et lui donne le meilleur rayon de couleur. Il colore ensuite tous les points invalides en noir.
Résultats
Image 1 - 0 changements, Image 2 - 13 698 changements
Image 3 - 24 269 changements, Image 4 - 103 changements
Image 5 - 5 344 changements, Image 6 - 4 456 changements
Sans pixels non valides supprimés, 42 782 changements au total
Les pixels verts sont la première couche de pixels non valides.
Image 1 - 0 changements, Image 2- 9 889 changements
Image 3 - 24 268 changements, Image 4 - 103 changements
Image 5 - 4 471 changements, Image 6 - 4 050 changements
Tous les pixels blancs dans toutes les images peuvent avoir une ligne tirée vers eux à partir du pixel central si la ligne ne doit pas commencer / se terminer au centre mais plutôt n'importe où sur le pixel.
args[0]
contient le nom du fichier d'entrée.args[1]
contient le nom du fichier de sortie.Imprime en
stdout
nombre de modifications.la source
Python - PIL -
216,228108,363 changements au totalWhoo! Coupez-le en deux grâce à @AJMansfield! Cet algorithme saute tous les soucis avec le calcul des lignes et l'optimisation et quoi non.
Il change juste tous les blancs en noir sauf un. S'il n'y a pas de blancs, cela en fait un noir un blanc.Il vérifie s'il y a plus de blancs ou de noirs et change tous les autres types sauf un. S'il n'y a pas de noir, cela fait (0, 0) le centre.Résultats
Image 1 - 28688 changements, Image 2 - 24208 changements
Image 3 - 24248 changements, Image 4 - 7103 changements
Modifications de l'image 5 - 11097, modifications de l'image 6 - 13019
Prend le nom de fichier de raw_input et écrit dans out.png et imprime le nombre de modifications.
la source