Prefacio
Como estaba disparando un tiro de arco 900 hoy más temprano (10 termina con 6 flechas por final, y 10 termina con 3 flechas por final, para un total de 90 flechas y un puntaje máximo de 900), pensé en este desafío.
En tiro con arco (suponiendo que está disparando en una cara objetivo suministrada por FITA [la hoja de papel a la que dispara]), por cada flecha puede reclamar una puntuación máxima de 10. La cara objetivo contiene 10 u 11 anillos de diámetro decreciente, anidados uno dentro del otro. Desde el anillo interno hacia afuera, estos se cuentan de 10 puntos a un punto (y en el caso de 11 anillos, hay un anillo interno más secundario que cuenta como 'X', que puntúa como 10 pero se usa en casos de desempate como El valor más alto). Observar:
Por supuesto, me refiero a la puntuación métrica FITA, como se ve en la ilustración anterior. Si observa de cerca, puede observar el anillo más interno, que es una línea de puntos desvanecida, cuyo puntaje no está marcado. Esa es la 'X' a la que me refería, pero no tendrá que prestar atención a eso a menos que compita por el bono.
Desafío
Cree una función (o programa completo, si el idioma no admite funciones), que reciba una imagen perfectamente cuadrada como entrada (o nombre de archivo de imagen, si es necesario), que contenga algún número de verde (HEX # 00FF00, RGB (0, 255, 0)) puntos de algún tamaño, y devuelve la puntuación. La imagen puede contener datos distintos de los puntos verdes , pero el verde siempre será exactamente el mismo tono.
Puede imaginar que la imagen cuadrada representa la cara del objetivo, con el anillo más externo tocando en 4 puntos (centro superior, centro inferior, centro derecho, centro izquierdo). La cara objetivo representada siempre será de la misma proporción, con todos los anillos con un ancho de exactamente 1/20 del ancho de la imagen objetivo de entrada. Como ejemplo, dada una imagen de entrada de dimensiones de entrada de 400 px por 400 px, puede suponer que cada anillo tiene un ancho interno de 20 px, como se ilustra a continuación:
Aclaraciones
- Si toca dos anillos separados, se cuenta el mayor de los dos anillos
- No tiene que contabilizar automáticamente las fallas o el caso 'x', a menos que intente el bono
- Puede suponer que no se superponen círculos verdes
- También puede suponer que no hay otros píxeles de ese tono de verde en la imagen
- La imagen estará en formato PNG, JPEG o PPM (a elección)
- Se permiten bibliotecas de procesamiento de imágenes externas, si se crearon antes de publicar esta pregunta
- Puede suponer que todos los círculos verdes en un objetivo tendrán el mismo diámetro
- Si disparas (hah) para la bonificación de círculos superpuestos, puedes suponer que al menos un círculo en la imagen no tiene otra superposición
- Las lagunas estándar no están permitidas
Casos de prueba
Los siguientes dos casos deberían tener un puntaje de 52 (o en el caso de bonos, 52 con 1 'x' y 1 falta):
Y este último caso de prueba debería obtener una puntuación de 25 :
Prima
- -25 bytes si también devuelve el número de errores (fuera de cualquiera de los anillos)
- -30 bytes si también devuelve la cantidad de X (suponga que la x más interna es 3/100 del ancho de la imagen, y 10 es entonces 2/100 del ancho de la imagen. Las proporciones 1-9 permanecen sin cambios)
- -35% de recuento de bytes si tiene en cuenta círculos superpuestos
Este es el código de golf, por lo que gana el menor número de bytes. ¡Que te diviertas!