Передмова
Коли я стріляв з лука на 900 раундів раніше (10 кінців на 6 стрілках в кінці, і 10 кінців на 3 стрілках в кінці, загалом 90 стрілок і максимальний бал 900), я подумав про це завдання.
У стрільбі з лука (якщо припустити, що ви стріляєте по цільовій обличчі, що постачається FITA [аркуш паперу, в який ви стріляєте]), для кожної стрілки ви можете отримати максимальний бал 10. Цільова грань містить 10 або 11 кілець зменшення діаметра, вкладені всередину один одного. Від внутрішнього кільця назовні вони рахуються від 10 балів до однієї точки (а у випадку з 11 кільцями є вторинне внутрішнє кільце, що рахується як "X", яке набирає значення 10, але використовується у випадках розриву краватки як вище значення). Дотримуйтесь:
Звичайно, я маю на увазі оцінку метрики FITA, як видно з наведеної вище ілюстрації. Якщо ви придивитесь уважніше, ви можете спостерігати найпотаємніше кільце - це зів’яла пунктирна лінія, оцінка якої не позначена. Це "X", про який я мав на увазі, але вам не доведеться прислухатися до цього, якщо ви не змагаєтесь за бонус.
Виклик
Створіть функцію (або повну програму, якщо мова не підтримує функції), яка отримує ідеально квадратне зображення як вхідне (або ім'я файлу зображення, якщо потрібно), що містить деяку кількість зеленого (HEX # 00FF00, RGB (0, 255, 0)) точок певного розміру і повертає бал. Зображення може містити дані, окрім зелених крапок , але зелений завжди буде точно такого ж відтінку.
Ви можете уявити, що квадратне зображення являє цільове обличчя, причому зовнішнє кільце торкається в 4 точках (верхній центр, нижній центр, правий центр, лівий центр). Представлена цільова грань завжди буде однакової пропорції, при цьому всі кільця мають ширину рівно 1/20 від ширини вхідного цільового зображення. Як приклад, з урахуванням вхідного зображення розмірів вводу 400px на 400px, ви можете припустити, що кожне кільце має внутрішню ширину 20px, як показано нижче:
Роз'яснення
- Якщо торкатися двох відокремлених кілець, підраховується вища з двох кілець
- Вам не доведеться автоматично обліковувати пропуски або "x" випадок, якщо тільки не намагаєтеся отримати бонус
- Ви можете припустити, що жодні зелені кола не перетинаються
- Ви також можете припустити, що ніяких інших пікселів цього відтінку зеленого немає на зображенні
- Зображення буде або у форматі PNG, JPEG або PPM (на ваш вибір)
- Зовнішні бібліотеки обробки зображень дозволені, якщо вони є автором до публікації цього питання
- Можна припустити, що всі зелені кола на одній цілі матимуть однаковий діаметр
- Якщо при зйомці (га) для бонусу, що перекривається, ви можете припустити, що принаймні одне коло на зображенні не має іншого перекриття.
- Стандартні лазівки заборонені
Тестові справи
Наступні два випадки мають набрати 52 (або у випадку бонусів - 52 з 1 'х' та 1 промах):
І цей останній тестовий випадок повинен набрати 25 :
Бонус
- -25 байт, якщо ви також повернете кількість промахів (поза будь-яким з кілець)
- -30 байт, якщо ви також повернете кількість Xs (припустимо, що найпотужніший х становить 3/100-ту ширину зображення, а 10 - це 2/100-та ширина зображення. Пропорції 1-9 залишаються незмінними)
- -35% кількість байтів, якщо ви враховуєте кола, що перекриваються
Це код гольфу, тому виграє найменше байтів. Веселіться!