รูปนี้มีกี่รูปร่าง?


10

เด็กดีมากในการจำแนกวัตถุและนับพวกเขา คอมพิวเตอร์ดูเหมือนจะมีปัญหามากกว่า นี่เป็นเวอร์ชันที่ง่ายของปัญหานี้ คุณสามารถเขียนโปรแกรมขนาดเล็กที่สามารถจำแนกและนับจำนวนวัตถุในภาพได้หรือไม่?

ปัญหา: กำหนดรูปภาพที่มีวงกลมและสี่เหลี่ยมหนึ่งวงกลมขึ้นไปส่งคืนจำนวนเต็ม 2 จำนวนด้วยการนับวงกลมและจำนวนสี่เหลี่ยม

กฎระเบียบ

  • ภาพอินพุตจะเป็นตัวเลขสีดำบนพื้นหลังสีขาวในรูปแบบบิตแมปใด ๆ ที่คุณเลือก
  • ความกว้างและความสูงของภาพจะอยู่ระหว่าง 100 ถึง 1,000 พิกเซล
  • รูปภาพจะถูกเก็บไว้ในรูปภาพ
  • ตัวเลขจะมีความกว้าง 1 พิกเซล
  • รูปภาพจะไม่ใช้การลบรอยหยัก พวกเขาจะเป็นสีดำบนพื้นขาวเท่านั้น
  • ตัวเลขอาจสัมผัสตัดกันหรืออยู่ในรูปอื่น
  • ตัวเลขที่ตัดกันจะมีพิกเซลทั่วไปสูงสุด 4 พิกเซล
  • แวดวงจะมีขนาดเส้นผ่าศูนย์กลาง 20 พิกเซลขึ้นไป
  • ด้านสี่เหลี่ยมผืนผ้าจะมีความยาว 10 พิกเซลขึ้นไป
  • คุณไม่สามารถใช้บิวด์อินหรือไลบรารี่ที่จดจำรูปร่างหรือฟังก์ชั่นอื่นใดที่ทำให้ความท้าทายนี้เป็นเรื่องเล็กน้อย
  • ส่งคืนหรือพิมพ์จำนวนเต็ม 2 จำนวนด้วยการนับวงกลมและสี่เหลี่ยม

ตัวอย่างที่ 1

ตัวอย่างที่ 1

คำตอบ: 3 4

ตัวอย่างที่ 2:

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ: 4 13

นี่เป็นความท้าทายของรหัสกอล์ฟดังนั้นโปรแกรมหรือฟังก์ชั่นที่สั้นที่สุดในแต่ละภาษาจะเป็นผู้ชนะ


ฉันสามารถบอกได้แล้วว่าการนับสี่เหลี่ยมผืนผ้าจะเป็นเรื่องเกี่ยวกับการนับมุม
Bálint

คำตอบ:


3

PHP - 355 ไบต์

'<image-url>'นับไบต์ไม่รวมถึง

<?php
m('<image-url>');function m($f){$i=imagecreatefrompng($f);$r=f($i,17);$c=f($i,9);echo($c-$r).' '.$r."\n";}function f($i,$k){$w=imagesx($i);$h=imagesy($i);$r=0;for($y=0;$y<$h;$y++)for($x=0;$x<$w;$x++)if(!imagecolorat($i,$x,$y))$r+=g($i,$x,$y,$w,$k);return$r;}function g($i,&$x,$y,$w,$k){$l=$x;while(!imagecolorat($i,$x,$y)&&$x<$w)$x++;return($x-$l>$k)?1/2:0;}

ในทั้งสองกรณีทดสอบ URL ที่ผมใช้อยู่และhttp://i.stack.imgur.com/qnIFk.pnghttp://i.stack.imgur.com/HV9k3.png

นับเส้นแนวนอนและหารด้วยสองเพื่อให้ได้จำนวนรูปร่าง อาศัยการสังเกตว่าวงกลมมีส่วนแนวนอนที่สั้นกว่าและสี่เหลี่ยมมีส่วนแนวนอนที่ยาวกว่า

แฮ็คที่ยอมรับแล้วไม่รับประกันว่าจะทำงานเพื่อสิ่งอื่นนอกจากกรณีทดสอบ!

ฉันพยายามหมุนรูปภาพด้วย± 45 °และตรวจหาเส้นแนวนอน นี่จะเทียบเท่ากับการตรวจสอบเส้นทแยงมุมและจะรับวงกลมได้ดีกว่า แต่ฉันไม่พบอัลกอริธึมการแก้ไขที่ทำให้ขอบสะอาดพอที่จะใช้งานได้ ตัวอย่างเช่นพวกเขาอาจเปื้อนเส้นเป็นพิกเซลสองแถวและทำให้การนับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.