คำนำ
เมื่อก่อนฉันยิงธนู 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 (ตัวเลือกของคุณ)
- อนุญาตให้ใช้ไลบรารีการประมวลผลภาพภายนอกหากเขียนก่อนโพสต์คำถามนี้
- คุณอาจสมมติว่าวงกลมสีเขียวทั้งหมดในเป้าหมายเดียวจะมีเส้นผ่านศูนย์กลางเท่ากัน
- หากการถ่ายภาพ (hah) สำหรับโบนัสวงกลมที่ทับซ้อนกันคุณอาจสันนิษฐานว่าอย่างน้อยหนึ่งวงกลมในภาพไม่มีการซ้อนทับอีก
- ช่องโหว่มาตรฐานไม่ได้รับอนุญาต
กรณีทดสอบ
สองกรณีต่อไปนี้ควรแต่ละคะแนน52 (หรือในกรณีของโบนัส 52 กับ 1 'x' และ 1 พลาด):
และกรณีทดสอบสุดท้ายนี้ควรได้คะแนน25 :
โบนัส
- -25 ไบต์ถ้าคุณส่งคืนจำนวนคิดถึง (นอกวงแหวนใด ๆ ) เช่นกัน
- -30 ไบต์หากคุณส่งคืนจำนวน Xs ด้วย (สมมติว่าส่วนท้ายสุดของ x คือ 3 / 100th ของความกว้างของภาพและ 10 คือ 10/2 ของความกว้างของภาพสัดส่วนที่ 1-9 ยังคงไม่เปลี่ยนแปลง)
- -35% ไบต์จะนับหากคุณนับรวมวงกลมที่ทับซ้อนกัน
นี่คือรหัสกอล์ฟดังนั้นไบต์ที่น้อยที่สุดจึงเป็นผู้ชนะ มีความสุข!