Préface
Alors que je tirais un tir à l'arc 900 plus tôt dans la journée (10 bouts à 6 flèches par bout et 10 bouts à 3 flèches par bout, pour un total de 90 flèches et un score maximum de 900), j'ai pensé à ce défi.
En tir à l'arc (en supposant que vous tirez sur une face cible fournie par la FITA [le morceau de papier que vous tirez]), pour chaque flèche, vous pouvez réclamer un score maximum de 10. La face cible contient 10 ou 11 anneaux de diamètre décroissant, imbriqués les uns dans les autres. De l'anneau intérieur vers l'extérieur, ceux-ci sont comptés de 10 points à un point (et dans le cas de 11 anneaux, il y a un anneau le plus intérieur secondaire qui compte comme `` X '', qui marque 10, mais qui est utilisé dans les cas de départage comme la valeur la plus élevée). Observer:
Bien sûr, je me réfère au score métrique FITA, comme le montre l'illustration ci-dessus. Si vous regardez de plus près, vous pouvez observer l'anneau le plus intérieur, qui est une ligne pointillée décolorée, dont le score n'est pas marqué. C'est le «X» auquel je faisais référence, mais vous n'aurez pas à en tenir compte à moins de concourir pour le bonus.
Défi
Créez une fonction (ou un programme complet, si la langue ne prend pas en charge les fonctions), qui reçoit une image parfaitement carrée en entrée (ou un nom de fichier d'image, le cas échéant), contenant un certain nombre de verts (HEX # 00FF00, RGB (0, 255, 0)) points d'une certaine taille, et renvoie le score. L'image peut contenir des données autres que les points verts , mais le vert sera toujours exactement la même nuance.
Vous pouvez imaginer que l'image carrée représente le visage cible, avec l'anneau le plus extérieur touchant en 4 points (centre supérieur, centre inférieur, centre droit, centre gauche). La face cible représentée sera toujours de la même proportion, tous les anneaux ayant une largeur d'exactement 1 / 20e de la largeur de l'image cible en entrée. À titre d'exemple, étant donné une image d'entrée de dimensions d'entrée 400px par 400px, vous pouvez supposer que chaque anneau a une largeur intérieure de 20px, comme illustré ci-dessous:
Clarifications
- Si vous touchez deux anneaux séparés, le plus élevé des deux anneaux est compté
- Vous n'avez pas à prendre automatiquement en compte les échecs ou le cas 'x', à moins d'essayer le bonus
- Vous pouvez supposer qu'aucun cercle vert ne se chevauche
- Vous pouvez également supposer qu'aucun autre pixel de cette nuance de vert n'est dans l'image
- L'image sera au format PNG, JPEG ou PPM (au choix)
- Les bibliothèques de traitement d'images externes sont autorisées, si elles sont créées avant la publication de cette question
- Vous pouvez supposer que tous les cercles verts sur une cible auront le même diamètre
- Si vous photographiez (hah) pour le bonus des cercles qui se chevauchent, vous pouvez supposer qu'au moins un cercle dans l'image n'a pas un autre chevauchement
- Les failles standard sont interdites
Cas de test
Les deux cas suivants devraient chacun marquer 52 (ou dans le cas des bonus, 52 avec 1 'x' et 1 manque):
Et ce dernier cas de test devrait marquer 25 :
Prime
- -25 octets si vous renvoyez également le nombre de ratés (en dehors de l'un des anneaux)
- -30 octets si vous retournez également la quantité de Xs (supposez que le x le plus à l'intérieur soit 3 / 100ème de la largeur de l'image, et 10 est alors 2 / 100ème de la largeur de l'image. Les proportions 1-9 restent inchangées)
- -35% d'octets si vous tenez compte des cercles qui se chevauchent
C'est le golf de code, donc le moindre octet gagne. S'amuser!